2016-06-13 62 views
0

據我所知,線程共享堆內存,但是不同的進程也可以共享一個堆,默認情況下會發生嗎?多個進程可以共享堆內存嗎?

如果不是,那麼當使用malloc時,直到堆內存用完,malloc操作是否只是返回堆中的下一個內存塊?因爲它明確沒有分配,因爲只有一個進程可以訪問堆,例如 例如,可以說堆內存可容納1-10個地址,第一個malloc調用(對於3個字節)不需要搜索它剛剛分配的任何空閒內存1-3的地址和返回地址1,現在第二次調用也不需要尋找空閒空間它剛剛回復地址4,依此類推...... 所以直到內存耗盡malloc才返回下一塊內存的地址它不需要尋找免費的未分配內存。

這是真的發生了什麼?

+1

我建議你指定你問的平臺。 – user694733

+0

太長時間才能在SO答案中複製,但[wikipedia](https://en.wikipedia.org/wiki/C_dynamic_memory_allocation#Implementations)給出了有關不同malloc實現的一些解釋 - 順便提一下,C標準確實不會**指定malloc實現... –

+1

你在問兩個問題。第一個是關於共享內存,第二個是關於'malloc'的行爲(除非你告訴我們你指的是哪個實現,否則無法準確回答;-))。請把你的問題分成不同的線索。 –

回答

1

每個進程都有一個唯一的內存映射(虛擬到物理內存映射)。所以兩個不同進程中的相同地址通常會碰到不同的物理內存。從這些例外存在,當你有專門映射內存共享等。

+1

和分配情況如何? –

+0

分配通常通過調用mmap或者通過調整sbrk()來發生。兩者都會導致更多的內存映射到進程中。這個記憶對於這個過程將是唯一的 –

相關問題