2015-07-06 57 views
-1

如果我沒有在我的c程序中使用任何malloc或calloc函數。那麼,在那個 時間內,程序的堆內存的起始地址和結束地址是相同還是不同?這意味着堆內存的大小是多少。程序的堆內存

+1

C運行時庫可能會在堆上分配。 – Bathsheba

+0

看來,你有兩個問題,它們是不同的 –

+1

你有沒有使用任何(第三方)庫?因爲完全有可能讓他們使用堆內存,而無需在任何地方調用'malloc' –

回答

0

這完全取決於實施。您的C運行時庫/啓動代碼可能已經在調用main函數之前將其放在堆上。

+0

如果我沒有使用任何頭文件? – mrg

+1

'header file'!='runtime library' –

+0

當你連接你的程序時,會注入一個靜態部分(對於GCC,通常是'crt1.o'或'crti.o'),它準備了C環境。你的程序被Linux內核調用的真正入口點實際上是'_start'。它準備C環境,然後調用你的'main'函數。入口點可能在其他操作系統上不同,但是原理總是相同的:在調用'main'之前,有正在運行的編譯器注入的代碼。這與任何使用標題無關。 – DarkDust