【问题标题】:Global array heap memory allocation in an online judge platform在线判断平台中的全局数组堆内存分配
【发布时间】:2013-10-15 12:01:15
【问题描述】:

这是一个最简单的程序:

#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));

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

【问题讨论】:

    标签: c++ arrays memory-management


    【解决方案1】:

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

    【讨论】:

    • 非常感谢您的回答。但我想知道它是否立即分配?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 2018-09-17
    • 2022-01-09
    • 1970-01-01
    • 2017-11-08
    相关资源
    最近更新 更多