?? 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 + -