了解虛擬位址空間

2021-09-02 16:30:53 字數 694 閱讀 3614

在程序建立的時候, fork() 函式之後就會建立乙個子程序

子程序複製了父程序的虛擬位址空間

那麼為什麼父子程序的位址是相同的而內容卻有差異?fork() 函式

因為子程序複製了父程序的虛擬位址空間,因此父子程序的位址是相同的,但是由於父子程序頁表到物理記憶體的位址不同,所以內容有差異

父子程序:

#include#include#includeint g_val = 0; 

int main()

else if(id > 0)

else

sleep(1);

return 0;

}

fork 之後:核心分配新的記憶體塊和核心資料結構給子程序、將父程序的部分資料結構拷貝至子程序、新增子程序到系統程序列表當中vfork() 函式:

vfork 建立乙個子程序:子程序如果沒有執行其他程式或退出之前,父程序阻塞在 vfork 處,不返回

虛擬位址空間

當處理器讀或寫入記憶體位置時,它會使用虛擬位址。作為讀或寫操作的一部分,處理器將虛擬位址轉換為實體地址。通過虛擬位址訪問記憶體有以下優勢 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x0...

虛擬位址空間

14 共 14 對本文的評價是有幫助 評價此主題 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x00000000 至 0x7fffffff。對於 64 位程序,虛擬位址空間為 8 tb,...

虛擬位址空間

1 text 段 存放程式執行的一塊記憶體區域,此區域大小在執行之前就已經確定下來了。2 data資料段 全域性初始化資料區 靜態資料區 只初始化一次,指用來存放程式中已初始化的全域性變數的一塊記憶體區域 已經初始化的全域性變數 靜態變數和常量 3 bss未初始化資料區 用來存放程式中未初始化的全域...