2013-03-10 42 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