我想更改malloc()
函數calloc()
,但我很困惑:我怎麼能在這段代碼中做到這一點?calloc()函數,而不是malloc()
void *mymalloc(size_t len)
{
void *buf;
size_t pages = (len & PAGE_MASK) + 2;
size_t offset = PAGE_SIZE - (len & ~PAGE_MASK);
if(offset < sizeof(size_t))
{
pages++;
offset += PAGE_SIZE;
}
if((buf = mmap(NULL, pages << PAGE_SHIFT, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, 0, 0)) == -1)
{
perror("mymalloc/mmap");
exit(1);
}
*(size_t *)buf = len;
*(size_t *)(buf+offset+len) = len;
if(mprotect(buf+offset+len, PAGE_SIZE, PROT_NONE) == -1)
{
perror("mymalloc/mprotect");
exit(1);
}
return buf+offset;
}
現在你的代碼中沒有'malloc()'。你在問什麼? – wallyk
那裏沒有'malloc()';只有一個'mymalloc()'。據推測,你需要一個調用'mymalloc()'的'mycalloc()',然後將空間清零。你還必須考慮'malloc()'帶一個參數,'calloc()'帶兩個必須相乘以產生請求的大小。 –
http://pubs.opengroup.org/onlinepubs/009695399/functions/mmap.html首次谷歌搜索結果 – khuderm