bho*_*ath 7 c linux shared-libraries shared-memory
我试图理解共享内存概念的基础.我试图创建一个具有一个函数和一个STATIC数组变量的共享库.我想通过该共享库的功能访问静态数组变量.
这是我的共享库
//foo.c
#include <stdio.h>
static int DATA[1024]={1 ,2 ,3 ,...., 1024};
inline void foo(void)
{
int j, k=0;
for(j=0;j<1024;j++)
{
k=DATA[j];
}
k+=0;
}
Run Code Online (Sandbox Code Playgroud)
我已按照共享库中的说明创建了共享库对象(libfoo.so)
现在我的问题是
1>如果我从两个不同的程序(program1和program2)访问foo(),那么program1和program2会有单独的foo()函数副本吗?
2> program1和program2 会有单独的静态DATA数组副本吗?
3>它们会加载到相同的物理内存位置吗?如果单独加载静态DATA数组,有没有办法强制/加载到相同的内存位置?
4>有没有办法找到为program1和program2存储静态DATA数组的位置?
我在linux下使用gcc.任何帮助将受到高度赞赏.谢谢.
只有一种定义明确的方法可以在进程之间共享内存:共享内存.从不同进程访问此内存需要正确同步对该区域的访问(通过进程本身).如果不同步访问,它将导致UNIX/Linux/Windows等多任务操作系统上的灾难.
答案详细:
如果我从两个不同的程序(program1和program2)访问foo(),那么program1和program2会有单独的foo()函数副本吗?
不可以.当您的程序与共享库链接时,函数代码将在链接到该库的多个程序之间共享.
program1和program2会有单独的静态DATA数组副本吗?
是.不会共享任何数据.
它们会加载到相同的物理内存位置吗?如果单独加载静态DATA数组,有没有办法强制/加载到相同的内存位置?
不(但请阅读上面的共享内存)
有没有办法找到为program1和program2存储静态DATA数组的位置?
是的,您可以使用GDB找到它.但程序无法找到彼此.
| 归档时间: |
|
| 查看次数: |
3468 次 |
| 最近记录: |