📄 clalloc.c
字号:
#include "clalloc.h"
#ifndef CLALLOC_OFF
#include "ceillog2.h"
/* tablica zaalokowanych blokow wiersz 0 - adres rzeczywisty, 1-alligned */
void * clablocks[2][CLALLOC_TAB_SIZE];
/* licznik zaalokowanych blokow */
int nblocks=0;
void *clacalloc(size_t num, size_t size)
{
void *pv, *ap;
assert ( 0x1<<ceil_log_2(CACHE_LINE_BYTES) == CACHE_LINE_BYTES );
if (nblocks==CLALLOC_TAB_SIZE)
return NULL;
pv=calloc(CACHE_LINE_BYTES - 1 + num * size, 1);
if (!pv)
return NULL;
ap=(void *)( (char *)0 + ((((char *)pv - (char *)0) + CACHE_LINE_BYTES - 1) & ~((unsigned long)CACHE_LINE_BYTES-1)) );
clablocks[0][nblocks]=pv;
clablocks[1][nblocks]=ap;
nblocks++;
return ap;
}
void *clamalloc(size_t bytes)
{
void *pv, *ap;
assert ( 0x1<<ceil_log_2(CACHE_LINE_BYTES) == CACHE_LINE_BYTES );
if (nblocks==CLALLOC_TAB_SIZE)
return NULL;
pv=malloc(CACHE_LINE_BYTES - 1 + bytes);
if (!pv)
return NULL;
ap=(void *)( (char *)0 + ((((char *)pv - (char *)0) + CACHE_LINE_BYTES - 1) & ~((unsigned long)CACHE_LINE_BYTES-1)) );
clablocks[0][nblocks]=pv;
clablocks[1][nblocks]=ap;
nblocks++;
return ap;
}
void clafree(void * addr)
{
int i;
nblocks--;
for (i=nblocks; i>=0; i--)
if (clablocks[1][i]==addr)
{
free(clablocks[0][i]);
clablocks[0][i]=clablocks[0][nblocks];
clablocks[1][i]=clablocks[1][nblocks];
return;
}
free(NULL);
return;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -