malloc 之後的父子程序之間的空間關係如何

2021-06-22 16:01:08 字數 592 閱讀 2576

有人問我,在父程序中malloc的記憶體空間,如果fork()後,到了子程序中,會不會在copy乙份出來?還是共用乙個空間?看程式:

執行結果:

[zyx@ymserver src]$ ../bin/t1     

p=0x8ea0008 ccc

child p=0x8ea0008 ccc3333

father p=0x8ea0008 ccc444

[zyx@ymserver src]$ child p=0x8ea0008 ccc3333

最開始,記憶體塊的值是ccc,位址為0x8ea0008

後來,先執行子程序的                strcpy(p, "ccc3333"); 發現,記憶體值變成了ccc3333

再父程序                strcpy(p, "ccc444"); 發現,記憶體值變成了ccc444

那麼是不是子程序的值被改變了呢?不是,看最後,子程序讀取的記憶體值還是ccc3333,就可以知道,父子程序各有一片空間。

那麼為什麼p的位址都是乙個地方呢?那是因為這個位址是乙個虛擬的位址,每個程序都擁有自己的虛擬位址空間,不同程序的相同位址空間其實在物理上是不同的位址塊!

Linux中父子程序之間的通訊

在linux系統中實現父子程序的通訊可以採用pipe 和fork 函式進行實現。利用兩個管道在父子程序之間進行通訊如 1 include2 include3 include4 include5 include 6int main void 23 24 pid fork 25if 1 pid 此處為了...

匿名管道實現父子程序之間的通訊

匿名管道 匿名管道可以實現父子程序的通訊,乙個由另乙個程序呼叫createprocess函式建立的程序稱為子程序 我們在利用createpipe建立你民管道的時候會獲得管道的讀寫控制代碼 子程序可以繼承這個控制代碼 在父程序通過 createpipe函式獲得控制代碼可以對匿名管道進行讀寫操作 在子程...

Linux 基於fork 函式父子程序之間的通訊

寫乙個程式,包含兩個程序,在子程序輸入參與計算的資料a b的值,在父程序中計算a b的值並輸出計算結果 要求輸出子程序和父程序的程序id.源程式 include include include include include include intmain void pid fork if pid ...