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

看板C_and_CPP (C/C++)作者 (zelda)時間11年前 (2015/01/23 15:42), 編輯推噓1(106)
留言7則, 5人參與, 最新討論串1/1
開發平台(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

01/23 16:25, , 1F
process 各自持有自己的變數啊
01/23 16:25, 1F

01/23 16:28, , 2F
你想要那個效果的話請找 shared memory
01/23 16:28, 2F

01/23 16:59, , 3F
如果 process 或 thread 用共用全域變數
01/23 16:59, 3F

01/23 16:59, , 4F
好像要在 DllMain 裡面不知道怎麼搞,有點忘記了...
01/23 16:59, 4F

01/23 16:59, , 5F
.so只有程式碼跟const部分共用 heap/stack都是分開的
01/23 16:59, 5F

01/23 17:10, , 6F
位子一樣是因為那個位址是相對位址 剛好一樣而已
01/23 17:10, 6F

01/26 09:53, , 7F
原來是剛好相對位址一樣,我該重修作業系統了
01/26 09:53, 7F
文章代碼(AID): #1KmVjjHo (C_and_CPP)
文章代碼(AID): #1KmVjjHo (C_and_CPP)