[问题] 共享函式库全域变量

楼主: 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