gpt4 book ai didi

c++ - const 对象的代码大小

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

我有一些源文件,其中需要一些 const 变量。
在提供的框架中,有一个 .hpp 头文件,其中包含这些变量的定义(不仅是声明)并且这个 header 包含在我之前提到的源文件中。
然后我意识到,我的每个源文件都包含该 RO 数据 const 变量的拷贝,所以为了减少内存占用(我在 ebdedded 系统上工作)我又制作了一个 .hpp,它包含在我的源文件中,其中包含对这些变量的 extern 引用(包含在其他地方)。
我比较了 build 。 o 对象信息,发现当使用带有外部引用的 .hpp 而不是实际变量的定义时,代码大小和 RO 数据大小更大。
这是为什么?

更新:我犯了错误。具体来说,这里是链接器映射文件的一个片段:(注意:RW,ZI 被移除)
不使用外部:
代码:1192
(包括数据):84
RO数据:144

使用外部:
代码:1392
(包括数据):216
RO数据:144

但我的错误带来的新问题多于答案:

  1. 在这种情况下,为什么 RO(常量数据)大小没有改变?
  2. 什么是公司此范围内的数据?

最佳答案

当定义不是 extern 时,编译器可以将它们内联,因此它们直接存储在代码中,在“立即加载”指令中。
(这被称为“常量折叠”。)

让它们 extern 隐藏编译器的定义,强制它在编译期间存储值并生成代码以在运行时获取它们。

它们不存储在只读段中,因为它们需要在程序启动时进行初始化,因此必须是可写的。
只读段仅适用于永不更改的内容,例如字符串文字的内容。

关于c++ - const 对象的代码大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37856985/

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