全域性變數是靜態變數,在整個程式的生命週期都存在,那麼多程序能否通過全域性變數(即靜態變數)進行通訊?
答案是不可以
首先我們先回顧子程序的誕生和其執行原理。
父程序通過fork來複製出乙個子程序的副本,根據原理,子程序擁有父程序的乙份完整資料拷貝。
同時由於fork時按頁複製資料太耗時,於是子程序在剛被fork出來的時候,讀取的其實是父程序中的記憶體資料(所以,這時候也可以說靜態變數是共享的)
但是, 當父子程序中的一方對靜態變數(其實不只是靜態變數,任何記憶體中的東西都是這樣)進行寫入操作時,就會觸發寫時複製機制,這個變數將在子程序中產生乙個新的空間來存放,於是變數不再共享。
所以,父程序和子程序中的變數是不可以被共享的,在程式設計師和程序的角度來看,每個程序的記憶體空間都是屬於它自己的。
靜態變數與動態變數
1 靜態儲存變數通常是在變數定義時就分定儲存單元並一直保持不變,直至整個程式結束。靜態變數,全域性動態變數都是靜態儲存 2 動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,使用完畢立即釋放 3 靜態儲存變數是一直存在的,而動態儲存變數則時而存在時而消失。通常把由於變數儲存方式不同而產生的特性...
靜態變數與動態變數
1 靜態儲存變數通常是在變數定義時就分定儲存單元並一直保持不變,直至整個程式結束。靜態變數,全域性動態變數都是靜態儲存 2 動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,使用完畢立即釋放 3 靜態儲存變數是一直存在的,而動態儲存變數則時而存在時而消失。通常把由於變數儲存方式不同而產生的特性...
java 靜態變數 與 非靜態變數
一 建立乙個類的物件時 new 類名 時,該類的.class檔案會被載入到一段記憶體中。1.先將該類的.class檔案會被載入到一段記憶體,初始化static屬性和方法,為他們分配空間,以後一直在記憶體中,即使這個物件被銷毀。這就是不建議使用static屬性和方法的原因之一 2.copy其中非sta...