gpt4 book ai didi

c - 局部 const 变量将存储在哪里?

转载 作者:行者123 更新时间:2023-11-30 14:43:18 28 4
gpt4 key购买 nike

局部 const 变量将存储在哪里?我已经验证过,函数中使用 const 变量的每个位置都会被其值替换(如立即值寻址模式)。但如果指针被分配给它,那么它就会存储在堆栈中。在这里我不明白处理器如何知道其常量值的一件事。堆栈中是否有像 .data 部分中那样的只读部分?

最佳答案

通常,处理器不知道一个对象在 C 中被声明为 const

系统通常具有在加载程序后标记为只读的内存区域,并且静态 const 对象存储在此类内存中。对于这些对象,处理器强制执行只读属性。

系统通常没有用于堆栈的只读内存。这本质上是很困难的——当函数启动时,内存需要被读写,以便可以构造它的堆栈帧,但在其他时候是只读的。因此程序会频繁更改硬件内存保护设置。这会损害性能,通常不值得这样做。

所以程序通常只有一个可用的读写堆栈。当您声明一个自动(而不是静态)const 对象时,编译器可以将它放在哪里?正如您所注意到的,它通常被优化为指令中的立即操作数。但是,当你获取它的地址时,它必须有一个地址,因此它必须在内存中。

一个想法可能是,由于它是const,所以不会改变,因此我们只需要一份副本,因此可以将其存储在静态只读部分中,而不是存储在堆栈上。然而,C 标准规定每个不同的对象都有不同的地址。为了满足该要求,每次在 C 代码中创建该对象时,编译器都必须在内存中创建该对象的不同实例。将其放入堆栈是一种简单的方法。

关于c - 局部 const 变量将存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53984638/

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