之前我們通過fork()函數,得知了父子進程之間的存在著代碼的拷貝,且父子進程都相互獨立執行,那么父子進程是否共享同一段數據,即是否存在著數據共享。接下來我們就來分析分析父子進程是否存在著數據共享。
我們都知道,在linux下,內存存儲的位置是全局變量,棧區,堆區,以及文件。字符常量區我們這里不作分析。下面我們依次以實際代碼來驗證它們是否存在著數據共享。所謂的父子進程數據共享,通俗點說就是父進程或者子進程對于數據的更改,會使得子進程或者父進程的數據同步更改。代碼檢測的思想是讓父子進程中的一個修改數據,未對數據修改的進程調用數據,查看是否數據被修改,如果數據被修改,那么證明兩者之間存在著數據共享,反之沒有。
1、全局變量
代碼運行以及運行結果如下:
通過結果得知,子進程對數據a進行了修改,但是父進程獲取的數據確仍然是初始化的值。所以我們可以得知,在數據類型為全局變量時,父子進程之間的數據不共享。
2.棧區(局部變量區)
實現的代碼與全局相似,只需要將int a=0在主函數中聲明即可。這里直接給運行結果,不在展示源碼。
</