2014-06-17 64 views
1

我已經知道父母和孩子有不同的地址空間,但是當我運行下面的代碼並檢查父母和孩子中的變量地址時,它出現了相同。就好像兩個變量名都用於同一個內存位置一樣,爲什麼孩子的值變化沒有反映回父代。父母和孩子具有相同的varibale地址,但值不同

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 

int main() 
{ 

    int turn = 0; 
    if (fork() == 0) 
    { 
      turn = 10; 
      printf("Child Turn: %d\n", turn); 
      printf("Child Address of turn: %p\n", &turn); 
      exit(0); 
    } 
    else 
    { 
      sleep(2); 
      printf("Parent Turn: %d\n", turn); 
      printf("Parent Address of turn: %p\n", &turn); 
    } 

return 0; 
} 

輸出是:

孩子轉到:轉10

兒童地址:0xbfc1830c

家長轉到:回合0

父地址:0xbfc1830c

如果兩者有相同的地址,爲什麼價值不同或者它就像例如

如果我們有兩個盒子一個父母和一個孩子。

兩個箱子包含數字1到10。

所以在孩子箱我們也有說5號,

,並在父母箱我們也有5號

數量是相同的但在不同的盒子裏。

與上述情況類似,地址與0xbfc1830c相同,但在不同的進程地址空間中。是這樣嗎?

回答

2

這是因爲virtual memory。這兩個進程在同一個虛擬地址上都有變量,但當然不在同一個物理地址上。

相關問題