功能和程序指令存储器

时间:2013-10-23 04:56:42

标签: c memory-management

我一直在寻找这些问题但却找不到。

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

2)程序指令/文本区域在进程的内存段中引用了什么?实例

2 个答案:

答案 0 :(得分:2)

没有。当您调用函数并从函数返回时,该堆栈用于存储函数调用顺序和上下文。这还包括这些函数的局部变量。堆栈位于存储器的(最好是不可执行的)读写数据部分。

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

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

如果您使用的是Windows PE,它将执行类似的操作,尽管它已过时,不是免费的,并且不支持64位(PE32 Plus)可执行文件。

答案 1 :(得分:1)

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

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

C没有程序指令或段或进程的概念,所以在C语境中讨论它们也没有意义。您需要指定您的架构师和操作系统,以便能够谈论它们。