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

Jiu*_*Jiu 3 c memory

例如,我有一个功能:

void getA(char* outA) {
  char a[10000];
  // copy a to outA
}
Run Code Online (Sandbox Code Playgroud)

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

我了解变量agetA被调用时会保留在堆栈内存中。

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

  • 可执行文件何时启动?
  • 什么时候getA被调用?

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

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

Ant*_*ala 6

C标准本身并不关心代码的加载。它只需要说明程序在运行时应如何表现。

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

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

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

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