【发布时间】:2010-12-25 14:24:58
【问题描述】:
我对 C 程序的程序执行布局图中的堆有疑问。
我知道所有动态分配的内存都分配在动态增长的堆中。但我想知道 C 程序的最大堆大小是多少??
我只是附加了一个示例 C 程序...在这里我尝试为字符串分配 1GB 内存,甚至执行 memset ...
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *temp;
mybuffer=malloc(1024*1024*1024*1);
temp = memset(mybuffer,0,(1024*1024*1024*1));
if( (mybuffer == temp) && (mybuffer != NULL))
printf("%x - %x\n", mybuffer, &mybuffer[((1024*1024*1024*1)-1)]]);
else
printf("Wrong\n");
sleep(20);
free(mybuffer);
return 0;
}
如果我一次在 3 个实例中运行上述程序,那么 malloc 应该至少在一个实例中失败 [我觉得如此] ...但 malloc 仍然是成功的。
如果成功,我能否知道操作系统如何处理 3GB 动态分配的内存。
【问题讨论】:
标签: c linux heap-memory