0

这是一个最简单的程序:

#include <iostream> 
using namespace std; 
char c[1000 * 1000 * 100]; 
int main() { 
     int a, b; 
     while (cin >> a >> b) { 
         cout << a+b << endl; 
     } 
     return 0; 
} 

这是一道非常简单的a+b题,几乎每个在线评委都把它作为第一道题。

它声明了一个占用 100MB 内存空间的全局 char 数组。并将超过大多数在线评委平台的内存限制。

但是,当我使用此代码提交到不同的 oj 平台时,结果是不同的。例如,poj 和 hduoj 是“接受”,但 zoj 将是“内存限制”。

所以我猜当程序运行时,100MB 内存不会立即分配,直到你使用 memset(c, 0, sizeof(c));

但是为什么有些平台会立即分配堆内存呢?为什么?

4

1 回答 1

1

c不在堆上分配。它存储在数据段中。加载进程时保留数据段。

于 2013-10-08T14:12:36.133 回答