例如,我有一个功能:
void getA(char* outA) {
char a[10000];
// copy a to outA
}
Run Code Online (Sandbox Code Playgroud)
然后,我编译getA为共享库。并链接可执行文件。
我了解变量a在getA被调用时会保留在堆栈内存中。
该函数getA何时会加载到内存中?
getA被调用?功能的上下文将分配到哪里?
如果是静态链接,会有所不同吗?
C标准本身并不关心代码的加载。它只需要说明程序在运行时应如何表现。
在现代操作系统上,实践中有很多可能性
这些情况之间的唯一区别是程序执行中的微小时序差异。在大多数情况下,您作为开发人员甚至不需要知道!
如果您正在从可移动设备上运行可执行文件,则在询问操作系统是否正常之前,请拔下设备的电源,因为它可能没有将所有程序代码都加载到内存中!