可执行库内存分配

时间:2014-10-24 08:57:12

标签: c++ memory memory-management

我从可执行文件A开始。这将作为静态库重新导出,我将在可执行文件B中使用。

在可执行文件A的源代码中,我有一个:

int a[100][100];

在全球范围内宣布。

在堆上运行可执行文件A variable a时(如预期的那样),并且它周围的内存内容为0。

我的问题如下:

运行可执行文件B时,variable a将在哪里,链接和使用静态库A中的变量(从可执行文件A生成)?

3 个答案:

答案 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