我想問一下,如果我包含更多的頭文件,它會增加所需的RAM大小嗎?例如,如果我#include <stdio.h>
和#include <string.h>
需要更多的RAM嗎?C:#include增加內存大小?
我寫與CNU C編譯器的嵌入式系統軟件,所以我希望儘量減少需要儘可能的RAM。
我想問一下,如果我包含更多的頭文件,它會增加所需的RAM大小嗎?例如,如果我#include <stdio.h>
和#include <string.h>
需要更多的RAM嗎?C:#include增加內存大小?
我寫與CNU C編譯器的嵌入式系統軟件,所以我希望儘量減少需要儘可能的RAM。
不,包含文件是針對編譯器的;它們根本不影響生成的代碼的大小。
號包含文件都沒有的功能,它們對系統函數的引用(至少是對於那些來到你的編譯器的那些)。如果您想自己查看,請導航至編譯器的include
目錄,並在文本編輯器中打開這些文件(但切勿改變它們)。它們與您編寫的任何其他.h
相同;他們沒有定義任何功能。
編譯器將看到該函數的名稱(例如:printf的)是有效的把它編譯成目標文件。鏈接器負責將該名稱轉換爲有效的系統調用。
我看到你使用內核這個詞。我不認爲這意味着你的想法。 – Enno
@Enno更改爲系統 –
想知道相同:)我認爲他的意思是「核心」,而不是。或者可能是我錯了。系統功能是錯誤的,因爲有些功能指向更高層次的功能。 –
標題包含僅在編譯期間有效。它們用於告訴編譯器他可以在哪裏找到他需要的實現。
編譯的可執行文件不包含這些信息,因此不受包含數量的影響。
這與PHP等解釋型語言有很大的區別,其中包含文件會增加內存使用量。但是,即使在PHP有,最大限度地減少內存使用的機制(包括文件一次,但不包括未使用的包括...)
這個問題的答案,你真的要問什麼是可能是「沒有」,至少當你在談論關於標準庫頭文件。包括它們對於可執行文件大小或內存佔用量不會產生影響。然而,我無法抗拒給予了相反的迴應:
這取決於什麼在你的包含文件。系統頭文件不會這樣做,但理論上,任何文件都可以在這個文件中。頭只包含函數原型和類型定義只是一個約定。如果我有這兩個文件:
// foo.c
int bigarray[1000];
和
// bar.c
#include "foo.c"
int main(int argc, char**argv()) {
return 0;
}
這是合法的代碼和bar.c將很好地編譯,但是我的內存佔用很可能是4K因爲較大foo.c中的數組(如果編譯器沒有優化它)。
是的,但只是稍微..但它確實會增加CPU使用率。您可以在Windows任務管理器中查看它....
我認爲OP很明顯是指可執行文件的RAM消耗,而不是編譯器的RAM消耗。此外,問題中沒有任何內容表示代碼是在MS Windows上編譯的。 – Lundin
是的,我可能會增加二進制文件的大小,然後增加RAM大小。 它有兩種方式: 1.頭文件具有全局/靜態變量定義 2.頭文件具有即使它不用於當前文件的功能。但編譯器仍然可以將它們保留在最終的二進制文件中
我說「可能會增加」,因爲如果編譯器足夠聰明,我只能包含必要的二進制數據,而放棄另一些。
的也許在頭文件中的其他內容,如變量聲明,類型定義等等。他們不會增加內存,因爲它只需要編譯時間,而不是運行時間。
增加編譯程序所需的RAM大小或增加編譯器本身所需的RAM大小? – jamesdlin
我的意思是我正在編譯的程序所需的RAM大小,我在微控制器中只有64KB內部RAM,並且我總是擔心RAM耗盡,因爲它很難調試... – eepty
哇第一個地方我覺得我的問題看起來很愚蠢和微不足道,我想知道我應該問這個問題嗎......但現在我認爲值得問這麼多不同的答案和評論...... – eepty