我一直在寻找这些问题,但找不到任何问题。
1)函数声明和定义本身是否存储在堆栈中?我知道他们的变量是,但是函数本身呢?
2) 程序指令/文本区域在进程的内存段中指的是什么?例子?
我一直在寻找这些问题,但找不到任何问题。
1)函数声明和定义本身是否存储在堆栈中?我知道他们的变量是,但是函数本身呢?
2) 程序指令/文本区域在进程的内存段中指的是什么?例子?
不,堆栈用于存储函数调用顺序和上下文,因为您调用函数并从函数返回。这也包括这些函数的局部变量。堆栈位于内存的(最好是不可执行的)读写数据部分中。
整个程序的代码本身(通常)在.text
节中,该节位于只读可执行内存中。
如果您使用的是 Linux,请查看该readelf
实用程序,该实用程序将告诉您所有有关 ELF 可执行文件在加载到内存时的布局方式。
如果你在 Windows PE Explorer 上会做类似的事情,虽然它已经过时,不是免费的,并且不支持 64 位 (PE32 Plus) 可执行文件。
函数声明和定义是句法结构,如逗号或一对括号。它们只存在于源代码中,不存储在任何地方。
另一方面,函数是在运行时存在并具有地址的东西。没有指定地址在哪里。就 C 而言,函数和数据属于完全不同的地址空间。它们的地址不能混用。所以你甚至不能问它是否在堆栈上,这个问题是不明确的。
C 没有程序指令、段或进程的概念,因此在 C 的上下文中谈论它们也没有任何意义。您需要指定您的架构师和操作系统才能谈论它们。