2013-01-14 69 views
4

作爲每:的malloc&釋放calloc

calloc(20, sizeof(int)) 
malloc(20 * sizeof(int)) 

這將爲20點的整數分配內存。

malloc() & calloc()calloc()分配虛擬或物理連續的空間嗎?

+0

我認爲你的意思是'連續的' – davmac

回答

5

無論空間物理連續與否取決於你正在開發的平臺,MMU和OS ....

事實上,這將是連續的,總是如此。

無論是calloc還是malloc都不會有所作爲。

9

C並沒有說機器具有物理地址空間和虛擬地址空間。

所有你知道的是你得到指針,並且你可以按照語言的操作符定義的連續方式來索引/解引用它們。

如果這樣做需要硬件將虛擬地址重新映射到物理地址,或將電子郵件發送給回覆所尋址位置的內容的用戶,則會執行定義。

0

兩者都會分配連續的虛擬內存。現在假設您正在運行一個系統,其中分頁被用作虛擬內存管理。十個第一個字可能分配在一個頁框的末尾,最後十個分配在另一個頁框的開始。物理頁面分配取決於內核,而不是{m|c}alloc()實現。這些將通過系統調用請求更多內存(請參閱brk()mmap())。由於物理頁面框架分配不一定是連續的,因此您的分配的一部分將落入一頁,而另一部分落入另一頁。

在大多數情況下,您不必擔心數據是否會越過頁面邊界,除非您正在尋找優化並且希望避免過多的次要頁面錯誤。