c++ - gdb - 重新设置一个常量

标签 c++ c gdb constants

我有

const int MAX_CONNECTIONS = 500;
//...
if(clients.size() < MAX_CONNECTIONS) {
    //...
}

我正在尝试为 MAX_CONNECTIONS 找到“正确”的选择。所以我启动 gdb 并设置 MAX_CONNECTIONS = 750。但似乎我的代码没有响应此更改。我想知道这是否是因为 const int 在编译时被解析,即使它最终在运行时被碰撞。这听起来是否正确,而且,使用 GDB 是否有任何方法可以绕过这种效果而无需在我的程序中编辑代码?预热到 500 需要一段时间。

最佳答案

我怀疑编译器看到变量是 const,正在将常量内联到程序集中,而不是让生成的代码实际读取 MAX_CONNECTIONS 的值多变的。 C++ 规范的措辞方式是,如果原始类型的变量显式标记为 const,则编译器可以出于优化目的对其做出某些假设,因为任何更改该常量的尝试要么(1) 非法或 (2) 导致未定义的行为。

如果你想使用 GDB 做这样的事情,考虑标记变量 volatile 而不是 const 以指示编译器它不应该优化它。或者,让此信息由其他一些数据源(例如,文件中的配置选项)控制,这样您就不会为了更改值而从其下方爆破程序的内存。

希望这对您有所帮助!

关于c++ - gdb - 重新设置一个常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10986682/

相关文章:

c++ - SFML 2.0 中需要的警告框功能

c - 如何在C语言中交换链表中的两个节点?

c - 多个 If-Else 语句 VS。 C 语言 While 循环中的 Switch 语句

c - 我使用辛普森规则进行集成的实现有什么问题

linux - linux内核模块生成的核心文件

c++ - 使用 GDB 调试从 shell 脚本调用的 C++ 程序

c++ - 编写高效的回溯函数

c++ - 在没有 IDE 的情况下用 C++ 手工编写 Windows GUI

c++ - 处理未知数量的 undefined object 以进行记录

c++ - 在命名空间中定义一个类