函数何时会加载到内存中?

时间:2019-09-19 06:06:00

标签: c memory

例如,我有一个功能:

void getA(char* outA) {
  char a[10000];
  // copy a to outA
}

然后将getA编译为共享库。并链接可执行文件。

我知道在调用a时变量getA会保留在堆栈内存中。

何时将函数getA加载到内存中?

  • 可执行文件何时启动?
  • 何时调用getA

将在哪里分配功能的上下文?

如果是静态链接,会有所不同吗?

1 个答案:

答案 0 :(得分:6)

C标准本身与代码的加载无关。只需说明程序在运行时的行为即可。

在现代操作系统上,实践中有很多可能性

  • 在可执行文件启动时将其加载到内存中
  • 调用时将其加载到内存中
  • 它在这两点之间的某个位置被加载到内存中
  • 它已在可执行文件启动之前 加载到内存中

这两种情况之间的唯一区别是程序执行中的微小时序差异。在大多数情况下,您作为开发人员甚至都不需要知道!

如果您正在从可移动设备上运行可执行文件,则在询问操作系统是否可以正常运行之前,请拔下设备的电源,因为它可能没有将所有程序代码都加载到内存中!