之前没注意过malloc的返回值,今天又看到了这个地址空间说明,根据《LINUX/UNIX系统编程手册》的说明,当使用malloc申请比较小的空间时,返回值应该位于0x40000000以内,而当malloc申请的空间比较大时,会使用mmap的私有匿名映射实现,所以malloc的返回值应该大于0x40000000,于是写了一个简单的程序,发现确实是这样,程序入下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char *buf;
buf = (char *)malloc(10 * 1024 * 1024);
printf("buf = 0x%08X\n", buf);
free(buf);
return 0;
}
在我测试用的ubuntu上,当申请10M的内存时,buf的值是大于0x40000000。当我减小申请的大小时,例如,申请10K的内存,buf的值就小于0x40000000。但是具体的这个临界值应该与系统以及当时的环境有关。