最近,在C中,我一直在學習動態內存位置。爲什麼不分配一大堆內存?
我還了解了limits.h
標準庫。
當分配內存時,爲什麼不這樣做:char array[INT_MAX]
而不是試圖使內存都完美和完美的你正在使用它?
我知道有可能在計算機上沒有足夠的可用內存,但在動態分配內存時也可能發生這種情況。
請在您的答案中包含關於效率的評論。
下面是一個例子的代碼:
#include <stdio.h>
#include <limits.h>
#include <string.h>
int main(void) {
FILE *fp;
char buff[255];
char str[INT_MAX];
fp = fopen("input.txt", "r");
if(fp) {
while(fgets(255, buff, fp)) {
strcat(str, buff);
}
}
printf("%s\n", str);
return 0;
}
這是讀取文件,並把它的所有例子中的內容爲一個字符串。
注意:此代碼未編譯,因此如果有任何錯誤,請忽略它們 - 我已經解釋了代碼應該執行的操作。
如果你想自己追蹤所有的內存使用情況,盡一切辦法讓自己失望。 – 2014-12-10 22:38:41
'char array [INT_MAX]'將在棧上分配一個數組。堆棧通常只有幾兆字節。 INT_MAX通常約爲20億。試圖在堆棧上分配2 GB是獲取[堆棧溢出](http://stackoverflow.com)的好方法。此外,手動內存管理是一個令人頭痛的問題,通常是浪費時間。另外,大多數系統在任何給定的秒鐘都有數百個進程運行,所以如果他們都試圖分配幾GB的內存「而不是試圖使內存全部整齊和完美」,那麼內存就會很快耗盡。你可以用一個例子來澄清你的問題嗎? – Cornstalks 2014-12-10 22:39:00
@KerrekSB,我認爲OP建議爲字符串分配最大字符數的緩衝區,而不是試圖找出合適的最大大小是多少。我不認爲他正在考慮寫自己的堆。 – 2014-12-10 22:40:57