返回信息流给你一段程序:
#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问题了,各大oj的第一道题估计都是它了。
问题是,用它去向各大oj提交,为什么会得到不同的结果呢?
我目前测试了3个oj,poj和hduoj是accepted的, 而zoj是memory limit的。
大家认为是什么原因?
我纠结于这个问题是因为,我前段时间跟队友因为 全局数组是否可以随便开大一些这个问题,争论过。队友拍着胸脯说,全局数组随便开,只要不memset就可以。而现在我用它在zoj上提交,报了内存错误。
所以说,我觉得,做程序的人,在不知道内在原理的时候,不要随便乱下结论。
另外,大家如果认为是以下原因的,请还是不要回复了(更新中):
1.各大oj栈限制不同。(全局数组不是分配在栈上的好么)
2.这个数组也不是存在 堆上的好么。
这是一条镜像帖。来源:北邮人论坛 / cpp / #74325同步于 2013/10/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
c++全局数组内存分配问题
hotdog
2013/10/8镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
应该不是区分堆栈限制的问题的吧~
像这种题一般在题干处会有明确的内存限制的吧~
即使题干里没有明确的内存限制,一般这种答题系统也会规定65536K的吧- -
【 在 hotdog 的大作中提到: 】
: 给你一段程序:
: #include <iostream>
: using namespace std;
: ...................
各系统明确说是64MB的内存限制
问题是有的oj能过,有的oj不能过。
【 在 tonyjansan 的大作中提到: 】
: 应该不是区分堆栈限制的问题的吧~
: 像这种题一般在题干处会有明确的内存限制的吧~
: 即使题干里没有明确的内存限制,一般这种答题系统也会规定65536K的吧- -
: ...................
各系统限制不同 这个原因,是肯定可以排除的阿。
各oj限制都是64MB,我已经申请了100MB,肯定都会超。
而且可以ac的oj,内存使用量并不是100MB,二是不到1M。说明只使用了a,b两个变量。
【 在 gdl 的大作中提到: 】
: 只要是定义了,肯定分配了相应的内存。应该是各个系统的限制不一样。
我没表述清楚,我觉得应该是各个系统限制的机制不一样。
你那个程序无论在什么样环境下跑起来内存都不超过1M,但是我加了一句memset(c, 'A', 1000*1000*100),内存就有100M了。然后我只对c中部分进行赋值memset(c, 'A', 1000),内存还是没超过1M。从这个现象中我猜测,这里的C占用内存是按实际使用的来计算,而不是申请的。实际全局变量怎么占内存我也不知道,正在查。
至于你的疑问我是猜测各个oj对内存检测方法不一样,可能有的是查看实际跑起来占用的,而有的则是从代码就审计出这个程序有潜在超出限制的威胁。我个人认为你队友说的有点道理。
【 在 hotdog 的大作中提到: 】
: 各系统限制不同 这个原因,是肯定可以排除的阿。
: 各oj限制都是64MB,我已经申请了100MB,肯定都会超。
: 而且可以ac的oj,内存使用量并不是100MB,二是不到1M。说明只使用了a,b两个变量。
这个问题我给出了一个 比较合理的解释:
可以去我的博客看一下:
http://blog.csdn.net/a775700879/article/details/12521915
【 在 gdl 的大作中提到: 】
: 我没表述清楚,我觉得应该是各个系统限制的机制不一样。
: 你那个程序无论在什么样环境下跑起来内存都不超过1M,但是我加了一句memset(c, 'A', 1000*1000*100),内存就有100M了。然后我只对c中部分进行赋值memset(c, 'A', 1000),内存还是没超过1M。从这个现象中我猜测,这里的C占用内存是按实际使用的来计算,而不是申请的。实际全局变量怎么占内存我也不知道,正在查。
: 至于你的疑问我是猜测各个oj对内存检测方法不一样,可能有的是查看实际跑起来占用的,而有的则是从代码就审计出这个程序有潜在超出限制的威胁。我个人认为你队友说的有点道理。
学习了
【 在 hotdog 的大作中提到: 】
: 这个问题我给出了一个 比较合理的解释:
: 可以去我的博客看一下:
: http://blog.csdn.net/a775700879/article/details/12521915