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