作爲每:的malloc&釋放calloc
calloc(20, sizeof(int))
malloc(20 * sizeof(int))
這將爲20點的整數分配內存。
malloc()
& calloc()
calloc()
分配虛擬或物理連續的空間嗎?
作爲每:的malloc&釋放calloc
calloc(20, sizeof(int))
malloc(20 * sizeof(int))
這將爲20點的整數分配內存。
malloc()
& calloc()
calloc()
分配虛擬或物理連續的空間嗎?
無論空間物理連續與否取決於你正在開發的平臺,MMU和OS ....
事實上,這將是連續的,總是如此。
無論是calloc還是malloc都不會有所作爲。
C並沒有說機器具有物理地址空間和虛擬地址空間。
所有你知道的是你得到指針,並且你可以按照語言的操作符定義的連續方式來索引/解引用它們。
如果這樣做需要硬件將虛擬地址重新映射到物理地址,或將電子郵件發送給回覆所尋址位置的內容的用戶,則會執行定義。
兩者都會分配連續的虛擬內存。現在假設您正在運行一個系統,其中分頁被用作虛擬內存管理。十個第一個字可能分配在一個頁框的末尾,最後十個分配在另一個頁框的開始。物理頁面分配取決於內核,而不是{m|c}alloc()
實現。這些將通過系統調用請求更多內存(請參閱brk()
,mmap()
)。由於物理頁面框架分配不一定是連續的,因此您的分配的一部分將落入一頁,而另一部分落入另一頁。
在大多數情況下,您不必擔心數據是否會越過頁面邊界,除非您正在尋找優化並且希望避免過多的次要頁面錯誤。
我認爲你的意思是'連續的' – davmac