看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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物件一樣 還是說我想測試的語法根本就搞錯了 希望高手出面幫忙解說一下 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.209.145 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1421998957.A.472.html
Bencrie: process 各自持有自己的變數啊 01/23 16:25
Bencrie: 你想要那個效果的話請找 shared memory 01/23 16:28
wenyonba: 如果 process 或 thread 用共用全域變數 01/23 16:59
wenyonba: 好像要在 DllMain 裡面不知道怎麼搞,有點忘記了... 01/23 16:59
Killercat: .so只有程式碼跟const部分共用 heap/stack都是分開的 01/23 16:59
shadow0326: 位子一樣是因為那個位址是相對位址 剛好一樣而已 01/23 17:10
pili100: 原來是剛好相對位址一樣,我該重修作業系統了 01/26 09:53