dje*_*lin 5 c c++ gdb constants
我有
const int MAX_CONNECTIONS = 500;
//...
if(clients.size() < MAX_CONNECTIONS) {
//...
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试为 MAX_CONNECTIONS 找到“正确”的选择。所以我启动了 gdb 和set MAX_CONNECTIONS = 750
. 但我的代码似乎没有响应此更改。我想知道这是否是因为 const int 在编译时被解析,即使它最终在运行时被碰撞。这听起来正确吗?使用 GDB 有什么方法可以绕过这种效果,而无需在程序中编辑代码?加热到500需要一段时间。
我怀疑编译器看到变量是const
,正在将常量内联到程序集中,并且没有让生成的代码实际读取变量的值MAX_CONNECTIONS
。C++ 规范的措辞方式是,如果显式标记原始类型的变量const
,则编译器可以出于优化目的对其做出某些假设,因为任何更改该常量的尝试都是 (1) 非法的或 (2)导致未定义的行为。
如果您想使用 GDB 执行此类操作,请考虑标记该变量volatile
,而不是const
向编译器指示它不应对其进行优化。或者,让此信息由其他一些数据源(例如文件内的配置选项)控制,这样您就不会为了更改值而从其下面清除程序的内存。
希望这可以帮助!