我有
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/