内存问题求助

学术版

zhazesheng @ 2024-11-28 22:48:33

请问在完成代码后怎么判断是否MLE (有好几次我这里信誓旦旦打完代码后最后MLE了)


by oldye @ 2024-11-28 23:01:33

首先,数组开的太大可能会导致MLE(比如开了个10000*10000的二维数组,等等),int类型最大可以开1.6e8左右大小的数组(512MB),所以像上面那样的数组会超出内存限制。

其次,看一看STL容器有没有可能导致内存超限。由于这类容器不能显式地看出其占用内存大小,所以我们写代码时通常会不加注意。比如写BFS求最短路,用STL的队列维护BFS时,就有可能导致内存超限。

还有,当程序出现无穷递归时,有时可能以MLE的形式报错,而不是CE(亲测)。

应该就这些了吧


by LionBlaze @ 2024-11-28 23:04:46

@oldye 冷知识:10000 \times 10000 < 1.6 \times 10^8


by LionBlaze @ 2024-11-28 23:05:06

显然无穷递归不会 CE。


by Joe2011 @ 2024-11-28 23:21:42

bool be;
...//变量
bool nd;
cerr<<(&nd-&be)/1024.0/1024;

by Joe2011 @ 2024-11-28 23:21:58

@zhazesheng


by Wzhone @ 2024-11-29 08:17:42

@zhazesheng一个办法是像上面的在程序内部输出(但是看不了栈空间),另外一个可以用time看(仅linux,但是是实际内存和CCF看的不一样,详见这个帖子)


|