C++ 可执行到库内存分配
我从一个可执行文件a开始。它将作为一个静态库重新导出,我将在可执行文件B中使用它 在可执行文件A的源代码中,我有一个:C++ 可执行到库内存分配,c++,memory,memory-management,C++,Memory,Memory Management,我从一个可执行文件a开始。它将作为一个静态库重新导出,我将在可执行文件B中使用它 在可执行文件A的源代码中,我有一个: int a[100][100]; 这是在全球一级宣布的 在运行可执行文件时,变量A按预期位于堆上,并且围绕它的内存内容为0 我的问题如下: 当运行可执行文件B时,变量a将位于何处?可执行文件B链接并使用从可执行文件a生成的静态库a中的变量 int a[100][100]; a、 作为全局变量,将位于全局空间中,每个可执行文件位于单独的地址空间中,因为它们是静态链接的,因此没
int a[100][100];
这是在全球一级宣布的
在运行可执行文件时,变量A按预期位于堆上,并且围绕它的内存内容为0
我的问题如下:
当运行可执行文件B时,变量a将位于何处?可执行文件B链接并使用从可执行文件a生成的静态库a中的变量
int a[100][100];
a、 作为全局变量,将位于全局空间中,每个可执行文件位于单独的地址空间中,因为它们是静态链接的,因此没有公共共享。变量a将位于程序的数据部分,而不是堆,堆=动态内存 换句话说,a将在相同的内存空间中,就像您将自己运行a一样,并且由于它是一个全局变量,因此它将与其他常量/静态/全局变量一起出现在程序的数据部分 静态链接库时,该库中编译的代码将被复制粘贴到新的可执行文件中。所以你不会处于a和B是分开的过程的情况
您有一个B,它使用从a编写的代码。每个可执行文件都有自己的进程和内存空间。因此,可执行文件A的堆栈中将包含声明的变量,可执行文件B的堆栈中将包含它自己的副本
有关更多信息,请参阅。变量a按预期位于堆上-不,这不是真的。这里没有涉及堆。好的。变量a将位于何处?为什么不运行a和B,并让它们都打印地址?你想实现或理解什么?A是一个执行任务C的可执行文件,我希望任务C也在可执行文件B中执行,同时使用一个静态库。