关于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应该至少在一个实例中失败[我这样认为]...但是仍然成功了。
如果它成功了,我能知道操作系统如何处理3GB的动态分配内存吗?