【发布时间】:2012-02-17 18:51:32
【问题描述】:
我想在 c++ 编译中禁用死代码消除优化。有没有办法通过保留所有其他 -O 优化来禁用此特定优化。我尝试使用 -fnodce 但它不起作用。
更新(从评论中复制):我有类似的东西
timer t;
t.start();
for(int i=1;i<=1000;++i)
object t;
t.stop();
我想测量对象t 的构造时间并且不对其进行任何操作。我不想通过创建一个包含 1000 个对象的数组来做到这一点。有没有办法解决这个问题?
【问题讨论】:
-
这听起来像你把一些问题分成两部分,解决了简单的部分,现在正在努力解决困难的部分。为什么要做这样的事情?
-
我有类似计时器 t 的东西; t.start(); for(int i=1;i
-
如果您进行测量,您是否需要优化?或者即使在发布版本中您也需要测量?
-
首先,您的循环不会测量对象创建时间,而是测量对象创建+销毁时间,所以我不确定这是否是您想要的。第二点:如果禁用某些优化(假设您需要优化构建的时间),您的测量将如何正确?毕竟编译器很可能会在构造函数/析构函数中执行一些死代码和死存储消除(特别是如果构造函数主体中有代码而不是在初始化时做所有事情)
-
对于我的测量,我不需要其他优化,但我不喜欢 -g 选项,其中它添加了我不想要的调试符号。让我问不同的问题,是否可以通过任何编译器选项在没有任何调试符号的情况下进行优化?我正在寻找介于 -g 和 -O 选项之间的东西,
标签: c++ optimization gcc dead-code