gpt4 book ai didi

c++ - 代码、静态、堆栈和堆段实现

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:36 25 4
gpt4 key购买 nike

我知道每个段的用途,但我想知道实际上用 c 或 c++ 等语言实现它们?

是c/c++编译器程序员在写语言实现的时候写的吗?或者这些段是在操作系统/硬件级别实现的(可能是在操作系统为程序选择地址空间时)?

我将堆栈帧想象成一个简单的 c 结构,每次函数调用时都会将其压入堆栈。我把堆想象成一个动态数组等等...

最佳答案

这有点粗略 - 硬件架构、内存模型等都会影响 C/C++ 实现可能具有“段”特征的方式。较旧的 CPU 有局限性,导致一组更复杂的“段”(iAPX 286 - 还记得吗?)所以把它当作一个粗略的介绍,谷歌搜索流行语,......

目标代码包含可执行语句产生的代码:汇编机器指令产生的字节。这将进入一个代码段,这将(通常)导致一个内存段被写保护。

目标代码包含数据:由组装数据定义语句产生的字节,带有一些初始化(或默认值,在 C/C++ 的情况下为零),这将进入数据段,没有访问限制。

CPU 的工作方式需要堆栈:将返回地址压入堆栈,并通过压入函数参数来实现最有效的参数传递约定。 “堆栈框架”部分是“按照惯例”,但通常它由返回地址和参数组成;为局部变量保留了额外的空间:每个实例化一组(如果函数是递归的,这很重要)。

堆只是一个内存区域,从中分配(malloc、new)被提供。它通常分配在代码和数据段之外。堆栈可能会从堆中取出 - 这取决于您是只有一个堆栈段还是多个(想想线程)。

此外,请注意目标代码有多种“格式”或“语言”,即在目标代码中定义这些段的方式。这取决于系统的加载程序可以处理什么:一种这样的格式被称为“a.out”,另一种是“ELF”。编译器必须遵守格式和可能性。

关于c++ - 代码、静态、堆栈和堆段实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24350999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com