程序内存中的文本段是指什么?

时间:2014-12-12 22:14:20

标签: c memory memory-management text

我无法理解文本片段中存储的内容。到目前为止我发现它说它包含我的程序的可执行代码(0和1)。但是程序的整个内存不包含可执行代码(即用0和1编写)吗?我的意思是,程序首先编译,然后组装,最后链接,因此,一旦我们运行它,它都是二进制的。因此,一旦程序运行,堆栈帧就会在堆栈中为当前执行的函数生成,并且在这些堆栈帧中,所有变量都是0和1,但文本段内部是什么?

2 个答案:

答案 0 :(得分:1)

(有点奇怪的名称)text部分(段)通常包含已编译的二进制代码,正如您所怀疑的那样。

可执行文件通常包含除代码之外的其他类型的数据,如初始化变量值,资源,调试信息,重定位数据等,它们放在具有其他名称的部分中。

答案 1 :(得分:1)

在' .text'片段编译器将从程序指令生成的'和'以及编码这些指令,并且它通常是只读的和可执行的。而不是数据' segment,包含编码变量值的1和0,它通常是RW而不是可执行的。堆栈通常驻留在数据段中,因为您没有在那里推送任何指令,只有数据。在物理存储器中,文本段和数据段(以及一些其他部分)可以位于完全不同的位置,这些位置通常甚至不是连续的。即使它们在你的二进制文件中是连续的。这意味着,你的文字'段可以驻留在地址0x100中,但数据在0x1000000中。但它确实意味着你的可执行文件将是0x1000000大。