[問題] 共享函式庫全域變數

作者: pili100 (zelda)   2015-01-23 15:42:32
開發平台(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物件一樣
還是說我想測試的語法根本就搞錯了
希望高手出面幫忙解說一下
作者: Bencrie   2015-01-23 16:25:00
process 各自持有自己的變數啊你想要那個效果的話請找 shared memory
作者: wenyonba (射後不理很XX啊!!!!)   2015-01-23 16:59:00
如果 process 或 thread 用共用全域變數好像要在 DllMain 裡面不知道怎麼搞,有點忘記了...
作者: Killercat (殺人貓™)   2015-01-23 16:59:00
.so只有程式碼跟const部分共用 heap/stack都是分開的
作者: shadow0326 (非議)   2015-01-23 17:10:00
位子一樣是因為那個位址是相對位址 剛好一樣而已
作者: pili100 (zelda)   2015-01-26 09:53:00
原來是剛好相對位址一樣,我該重修作業系統了

Links booklink

Contact Us: admin [ a t ] ucptt.com