2013-03-10 41 views
1
#include<stdio.h>  
int main(){ 
    scanf("%d",&Testcase) 
    while(Testcase--){ 
    int a[100000] = {0}; 

    /* Other statements */ 

    } 
} 

在上面的程序中,对于每个Testcase,程序都分配100000 * sizeof(int)字节的内存。但在codechef中,我们可以使用的最大内存大约为10 MB。那么,是否有减少内存使用的最佳方法?如何防止初始化数组时过度使用程序堆栈内存?

P.S.我曾尝试将其声明为全局变量。但问题是,在每个测试用例之后,旧的Testcase值会干扰新的Testcase值。

此外,我试过在每个Testcase之后使用for循环重新初始化值为0的整个数组。但这需要很长时间,超过了3秒的时间要求。

我试图解决的问题是http://www.codechef.com/MARCH13/problems/FIRESC

编辑:允许的总内存限制实际上是约10 MB

+1

[动态分配](http://www.cplusplus.com/reference/cstdlib/malloc/)呢? – 2013-03-10 15:19:46

+0

c中可能吗? – 2013-03-10 15:20:18

+0

如果您可以使用的最大内存是64kB,那么无法分配100k整数!你的意思是“最大**栈**内存”吗? – 2013-03-10 15:20:30

回答

4

如果声明数组作为一个全局变量,它会被分配到.bss部分再次不是非常优化。如果你想分配一大段内存,malloc将是你在heap部分分配内存的首选方式。

+0

谢谢..我会尝试它..并发回 – 2013-03-10 15:27:01

+0

我使用malloc或calloc .. – 2013-03-10 15:33:17

+0

malloc不会初始化内存..不会产生任何问题 – 2013-03-10 15:33:47