我看到在stackoverflow上人们对于constexpr
变量进行了广泛的讨论,但是有一件事情却没有人谈到:
constexpr
变量存储在哪里?
每个人都知道C和C++程序的内存位置表:
- 堆栈
- 堆
- 静态
- 文本
操作系统(例如Linux)
对于操作系统,可执行代码和所有静态变量从硬盘驱动器中复制到RAM中分配的文本、静态等区域。然后程序作为一个进程启动。
嵌入式系统(例如Atmel控制器)
对于嵌入式系统,情况就不同了。这里的可执行代码和文字常量被永久存储在闪存中;只有静态变量被复制到RAM中。
文本或静态区域
我理解constexpr
相比于#defines
的好处,但对于嵌入式系统程序员来说,性能问题始终存在。在嵌入式系统中,RAM是一种昂贵的资源。因此,我需要知道constexpr
变量是存储在文本区域还是静态区域。更准确地说,它们是永久存储在闪存中还是作为变量真正创建到嵌入式系统的RAM中?
constexpr
很可能不会占用RAM。它是否存储为flash中的字面量,编码为指令中的立即操作数,或在运行时计算,甚至完全优化掉,取决于许多因素。 - Nate Eldredgeconstexpr
在编译后可能根本不存在。它们驱动代码的生成,但它们不必存在于代码(或数据)中。 - john[c++] Where are constexpr variables stored
并找到了 Where and how are constants stored?。我猜这不是重复的,因为这个问题声称这个问题是“没有人谈论”的东西,而我不想声称那些贡献者是“没有人”。我猜想从const
到constexpr
的更改可能会导致一个值从闪存移动到 RAM?但是,这个答案 似乎足以很好地回答当前的问题。 - JaMiT