我正在讀關於malloc的一點點,發現在的malloc的手冊頁以下:爲什麼malloc依賴於從某個閾值開始的mmap?
通常的malloc()分配從堆內存,並調整 大小所需的堆,使用SBRK (2)。當分配大於MMAP_THRESHOLD字節的存儲塊的塊 時,glibc malloc() 實現使用mmap(2)將存儲器分配爲私有匿名映射 。 MMAP_THRESHOLD默認爲128 kB,但使用mallopt(3)可調整爲 。使用mmap(2)執行的分配是 ,不受RLIMIT_DATA資源限制的影響(請參閱getrlimit(2))。
所以基本上從閾值MMAP_THRESHOLD malloc開始使用mmap開始。
- 是否有任何理由切換到mmap大塊?
- 這是否會觸及流程執行性能?
- mmap系統調用是否強制上下文切換?
(1)是; (2)理論上是的,但實際上這在大多數情況下提高了性能,這是(1)的原因; (3)每個系統調用都會。 –
@ n.m。並非所有的系統調用都需要上下文切換。看看下面的線程http://stackoverflow.com/questions/9238326/system-call-and-context-switch – redobot
顯然這是術語上的差異。你可能想知道mmap是否阻塞。通話本身可能不會被阻止,但它並不重要。無論如何,你的進程將會出現頁面錯誤並被迫進入上下文切換。 –