#include<stdio.h>
int main(){
scanf("%d",&Testcase)
while(Testcase--){
int a[100000] = {0};
/* Other statements */
}
}
在上面的程序中,对于每个 Testcase,程序分配 100000*sizeof(int) 字节的内存。但在 codechef 中,我们可以使用的最大内存约为 10 MB。那么,有什么优化的方法可以减少内存使用量吗?
附言我试过将其声明为全局变量。但这样做的问题是,在每个测试用例之后,旧的测试用例值会干扰新的测试用例值。
此外,我尝试在每个测试用例之后使用 for 循环将整个数组重新初始化为值 0。但这需要很长时间,超过了 3 秒的时间要求。
我要解决的问题是 http://www.codechef.com/MARCH13/problems/FIRESC
编辑:总允许内存限制实际上约为 10 MB
最佳答案
如果您将数组声明为全局变量,它将被分配到 .bss
部分,这同样不是最佳选择。如果您希望分配大部分内存,malloc
将是您在 heap
部分分配内存的首选方式。
关于c - 如何防止在初始化数组时过度使用程序堆栈内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15323802/