開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
linux gcc
問題(Question):
很突然地想到,如果我寫一個函式庫,裡面有一個全域變數,
當有兩個以上的程式做存取變更的話,會怎樣
所以自己寫了一個測試程
程式碼(Code):(請善用置底文網頁, 記得排版)
共享函式庫share.c
//內容就只是存放變數
int share = 100;
然後編譯指令
gcc share.c -shared -fpic libshare.so
測試程式碼
#include <stdio.h>
extern int share;
int main(){
printf("address is %x,and value=%d", &share, share);
//share = 101;
//printf("address is %x,and value=%d", &share, share);
getchar();
return 0;
}
補充說明(Supplement):
當我用一樣的程式碼,編出兩個執行檔,只是檔名不同而已
結果share的位址是一樣的
若其中一個把註解拿掉再編
位址就不是同一個
這裡產生的困惑是共享函式庫程式在記憶體是只有一份
函式應當沒什麼問題,但是變數呢
是程式各自保留一份
像java物件一樣
還是說我想測試的語法根本就搞錯了
希望高手出面幫忙解說一下