《关于memset导致的MLE》
今天做了一个题,一直MLE,然后不断压缩数组,最后还是没过,上网搜到别人的题解和我一样的数组大小都能过。
这是两个代码对比
Code1:(AC)
void init() { for(int i = 0;i <= k;++i) { tag[i] = 0; for(int j = 0;j < 10;++j) tree[i][j] = 0; } k = 0,f = 0; }
Code2:(MLE)
void init() { k = 0,f = 0; memset(tree,0,sizeof(tree)); memset(tag,0,sizeof(tag)); k = 0,f = 0; }
百度了一下才发现:
对于全局变量的处理,如果不初始化,那么它一开始占的内存会比初始化了的全局变量小非常多。
我这里一开始就对一个比较大的数组用memset进行了初始化,导致了全局变量占用了很多的内存。
其实只需要for循环遍历已用的空间即可。(又涨知识了..)