我正在尝试创建一个吃二进制文件的内存。 所以,我在while循环中使用malloc在一次迭代中分配1MB。
我发现一些未知行为,如果我只是使用malloc分配内存,那么/ proc / meminfo中的MemFree没有按预期减少。
如果我分配内存并做一些memset,那么/ proc / meminfo中的MemFree正在正常减少。
以下是代码:
int main()
{
char *temp,*cmd="cat /proc/meminfo | grep MemFree";
int i=0;
while(1)
{
temp=malloc(1024*1024);
//memset(temp,1,1024*1024); //If not commented then MemFree is updated properly
if(temp == NULL)
printf("failed \n");
else printf("allocated %d %x MB\n",++i,(unsigned int)temp);
temp=temp;
system(cmd);
usleep(1000*700);
}
}
先谢谢!!
答案 0 :(得分:2)
所以,我猜你的实际问题是"为什么看起来我的程序不使用内存,除非我添加代码写入它?"什么的。
这是因为内核很懒,希望你的应用程序过度分配。实际触摸内存后,它必须完成工作以使内存可用,因此该过程的实际内存使用量会随之改变。
答案 1 :(得分:2)
简单地分配内存并不意味着内核会为您的程序保留那么多物理内存。由于过度分配的做法,许多应用程序经常犯这样的错误,内核只是假设除非你当前正在写或从该内存中读取,否则你实际上并不需要它。
要让你的程序实际使用那个内存,让它随机写入,垃圾甚至只是设置值。