2013-09-01 92 views
1

在訪問中,我被問到了這個問題,malloc可以分配的最小大小是多少,以及malloc可以分配的最大大小是多少。用於查找程序的堆段或堆棧段大小的代碼片段

我回答分鐘的大小,如果1 byte,當我告訴他回答假設是正確的,現在告訴我什麼是最大大小的內存塊可以malloc分配(當你嘗試做malloc它有時失敗),覺得你有4GB的RAM與你寫我的代碼來找到你的簡單程序堆段的大小,你寫或寫我的代碼來找到堆棧段的大小。

任何人都可以幫助我解決這個問題。

它可以分配的最小尺寸是1 byte?我回答說,char需要最少的記憶。

+0

'malloc()'的一些實現甚至可以成功地分配'0'字節。所以我一定會去'1'字節。 – alk

+1

這是否有幫助: - http://stackoverflow.com/questions/6389120/malloc-memory-allocation-scheme-in-c ??? –

+0

你到目前爲止獲得了哪些代碼?你可以從malloc(1)開始,並增加數量,直到malloc失敗。應該接近你機器的RAM數量。 – jev

回答

0

的最小尺寸malloc能真正分配爲1個字節。根據C標準(7.22.3),「如果請求空間的大小爲零,則行爲是實現定義的:返回空指針,或行爲就好像大小是非零值一樣,除返回的指針不得用於訪問對象。「

另一方面,malloc幾乎肯定會分配比1更多的字節,即使您調用大小爲1的字節。它需要額外的字節來存儲其他信息,例如,分配的內存塊的大小,這將是解除分配所需的大小。此外,還有內存對齊問題。

如果您被要求編寫程序來計算最大尺寸malloc可以在給定的機器上分配4GB內存,並且在給定的時間,我認爲您應該編寫一個程序,使用二進制搜索來找到確切的最大。當然,每次你打電話時,程序的答案可能會有所不同。使用堆棧分配的變量大小的數組可以完成相同的操作,以計算堆棧的最大允許大小。

0

是的,最小尺寸malloc(size_t)保證能夠分配它(size_t) 1

請求0字節將返回NULL或不是。

C標準(WG14/N1256)7.20.3:

如果空間的請求的大小爲零,則行爲implementationdefined: 任一個空指針被返回,或行爲是因爲如果大小是一些 非零值,不同的是返回指針不得用於訪問對象