我对munmap有疑问。 我实现了自己的malloc / free。 Malloc工作正常,但免费没有。
示例(我直接使用大型munmap,因为我的免费代码太长而无法显示在这里):
#include "malloc.h"
#include <stdio.h>
int main()
{
int i;
char *addr;
char *t;
i = 0;
while (i < 1024)
{
addr=(char *)my_malloc(1024);
addr[0] = 42;
if (i == 0)
t = addr;
// my_free(addr);
i++;
}
if (munmap(t, 1024*1024) != -1)
printf("Ok\n");
return 0;
}
使用/ usr / bin / time -l ./a.out进行测试时,即使我删除了munmap,页面回收的数量仍然相同。 所以,我想munmap以其他方式失败,以取消映射页面.. 但我根本无法理解它可能来自哪里。
其他例子更简单:
# include <string.h>
# include <sys/mman.h>
# include <string.h>
# include <unistd.h>
# include <stdio.h>
int main()
{
int i;
char *addr;
i = 0;
while (i < 100)
{
addr = (char *)mmap(0, getpagesize()*256, PROT_READ | PROT_WRITE, MAP_ANON
| MAP_PRIVATE, -1, 0);
addr[0] = 42;
munmap(addr, getpagesize()*256);
i++;
}
return 0;
}
始终使用/ usr / bin / time -l ./a.out
对于munmap与否,恢复的页数仍然相同..
任何想法?
谢谢!
编辑: 总是没有想法,我做了一些测试,内存被有效地解除分配,但回收的页面数仍然是相同的。 我真的不明白?这是munmap的错误吗?