簡體   English   中英

分析C程序的內存使用情況

[英]Analyze memory usage of a C program

我知道有很多類似的問題(我不確定可能的重復)但我的問題是特定的。我在Windows和Unix運行C程序,我遇到分段錯誤(核心轉儲)錯誤.I知道那個錯誤的來源。這是因為我有時會通過分配一個大的整數數組來使用大量的內存。我的數組的大小每次都不同但我不能(大多數時候我不想)使用動態分配內存。

我想要的是找到一種方法或工具來分析我的C程序的內存使用情況,以便設置對該數組的大小或我所做的任何其他大內存分配的限制。更具體的說讓我們說該數組的大小介於4 *(2 ^ 4)字節和4 *(2 ^ 50)字節之間。最小值只有64個字節,但最大值是一個巨大的值。我怎樣才能知道程序需要多少內存和什么是適當的限制? 我定義了一個這樣的數組:

int bigarray[rows][columns]

行在2 ^ 4和2 ^ 50之間,列在4到50之間。

從堆(malloc()和朋友)獲取內存而不是使用堆棧。 堆允許更大的分配。

int *bigarray = malloc(sizeof(int)*rows*columns);

/* to access row r, column c */
bigarray[r*columns+c] = 42;
/* equivalent method to access row r, column c */
*(bigarray+r*columns+c) = 42;

您好,您可以使用工具valgrind來檢查內存消耗以及內存泄漏。

下面是Massif: a heap profiler鏈接Massif: a heap profiler ,希望它可以幫到你。

http://valgrind.org/docs/manual/ms-manual.html

計算(理論上)內存消耗:

printf("%d MB", (rows*columns*sizeof(int))/1024/1024);

您將不得不使用新的/ malloc方法來充分利用它(當然比使用當前的堆棧方法更多),即如果您使用:

int *bigarray= new int[columns*rows];

然后將其作為

val= bigarray[ x*columns + y];  // instead of bigarray[x][y];

有了這個,在現代平台(Windows,Linux等)和32位程序上,你可以期待相當不錯的尺寸為500 - 1000 MB

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM