我从可执行文件A开始。这将作为静态库重新导出,我将在可执行文件B中使用。
在可执行文件A的源代码中,我有一个:
int a[100][100];
在全球范围内宣布。
在堆上运行可执行文件A variable a
时(如预期的那样),并且它周围的内存内容为0。
我的问题如下:
运行可执行文件B时,variable a
将在哪里,链接和使用静态库A中的变量(从可执行文件A生成)?
答案 0 :(得分:0)
int a[100][100];
a,全球化,将在全球空间,并在每个可执行文件的单独地址空间中,因为它们是静态链接的,因此,没有共同的共享。
答案 1 :(得分:0)
变量a将位于程序的数据部分(不是堆,堆=动态内存)。
换句话说,a将在同一个内存空间中,就像你自己运行A一样,并且因为它是一个全局变量,它将最终出现在程序的数据部分,以及其他常量/静态/全局变量。
当您静态链接库时,来自该库的已编译代码正在被复制粘贴"进入新的可执行文件。因此,您不会处于A与B分开处理的情况。
你有一个B,它使用从A编写的代码。
答案 2 :(得分:0)
每个可执行文件都有自己的进程和内存空间。因此,可执行文件A将在其堆栈中包含您声明的变量,并且可执行文件B将在其堆栈中拥有它自己的副本。
有关详细信息,请参阅https://en.wikipedia.org/wiki/Inter-process_communication。