C语言 功能和程序指令存储器



我一直在寻找这些问题,但找不到任何问题。

1)函数声明和定义本身是否存储在堆栈中?我知道它们的变量是,但是函数本身呢?

2) 程序指令/文本区域在进程的内存段中指的是什么?例子?

No.堆栈用于存储函数调用顺序和上下文,就像您调用函数和从函数返回一样。这还包括这些函数的局部变量。堆栈位于内存的读写数据段(最好是不可执行的)中。

整个程序的代码本身(通常)位于.text部分中,该部分位于只读可执行内存中。

如果您使用的是Linux,请查看readelf实用程序,它将告诉您有关ELF可执行文件在加载到内存中时将如何布局的所有信息。

如果你在Windows PE Explorer上,也会做类似的事情,尽管它已经过时,不是免费的,并且不支持64位(PE32 Plus)可执行文件。

函数分隔和定义是语法结构,如逗号或一对括号。它们只存在于源代码中,不存储在任何地方。

另一方面,函数是在运行时存在并具有地址的东西。没有指定地址的位置。就 C 而言,函数和数据属于完全不同的地址空间。他们的地址不能混合。所以你甚至不能问它是否在堆栈上,这个问题定义不清。

C

没有程序指令或段或过程的概念,因此在 C 的上下文中谈论它们也没有意义。您需要指定您的架构和操作系统才能谈论它们。

最新更新