c++ - G++中const中的存储分配

标签 c++ gdb g++ constants

我了解c++编译器通常不会在某些条件下为const int分配存储,而是诉诸const折叠。我尝试了一个简单的程序来测试:

int main()
{
    const int num = 5;
    int a[num];
}
我使用-g标志进行编译,并在gdb中运行了它。当尝试在此处访问变量num的地址时,它显示了一些有效地址。我没想到这一点。这里有什么见解吗?

最佳答案

I understand that c++ compilers do not usually allocate storage for a const int under certain conditions and resort to const folding.


对我来说,不清楚“通常”是否发生了固定折叠,也不清楚“通常”是否发生了固定折叠导致编译器未分配存储空间。编译器将以某种方式确定常量折叠是否合适以及是否分配存储空间。您可能要做的某些事情,例如将指针或对const对象的引用传递给函数,可能会影响其决策。
无论如何,如果使用-g进行编译,那么绝对可以引导编译器为const int变量分配存储空间。这是确保GDB中的print num实际起作用的最简单方法。

关于c++ - G++中const中的存储分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62601753/

相关文章:

c++ - 从不在 PIMPL 中提供析构函数(使用 boost scoped_ptr),g++(4.6.1) 不会生成编译错误,为什么?

C++ 跳过代码行?

c++ - 如何使用透视投影从近剪裁平面绘制射线/直线?

c++ - 对于库,GDB 只能看到头文件中的源代码,而 .cpp 文件中的源代码不可用

assembly - gdb 对 .bss 中的符号和 .data 中的符号的行为不同

c - gdb "watch"无法通过 glibc(read) 函数修改变量?

c++ - 查找对象是否属于C++中的类

c++ - 无法迭代 Poco::Any 的 std::map

c++ - 如何使用我自己的库 C++ ubuntu

linux - 升级的构建机器(Debian),构建无法在服务器(CentOS)上运行