我想更改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