禁用gcc编译器中的特定优化(死代码消除)
Disabling specific optimization(Dead code elimination) in gcc compiler
我想禁用c++编译中的死代码消除优化。有没有一种方法可以通过保留所有其他-O优化来禁用这个特定的优化。我试过用-fnodece,但没有用。
更新(从评论中复制):我有类似的东西
timer t;
t.start();
for(int i=1;i<=1000;++i)
object t;
t.stop();
我想测量对象t
的构建时间,而不使用它。我不想通过创建1000个对象的数组来实现这一点。有办法解决这个问题吗?
在构造的对象上添加"volatile"限定符,这告诉编译器假设构造有副作用,从而阻止对其进行优化。即:
timer t;
t.start();
for(int i=1;i<=1000;++i)
volatile object t;
t.stop();
如果你只想测量对象的初始化时间,为什么要强迫编译器避免DCE之类的东西,而不仅仅是以一开始就避免问题的方式编写它?
object *arr = new object[100]; // allocate that outside the function and pass it into it
for (int i = 0; i < 100; i++) {
arr[i] = new object;
}
如果函数足够大,可以避免内联,那么应该可以很好地完成任务——否则,您可以导出函数并从另一个编译模块调用它,以避免不必要的优化。简单,一些编译器标志没有可能产生意外后果的技巧,唯一的开销是数组存储——如果这会显著影响你的计时,那么你无论如何都在测量错误的东西。
或者,如果你真的想要一些编译器特定的标志,gcc有一个noinline属性。。
相关文章:
- C和C 中的代码优化
- 使用清理代码优化多个出口点
- 在 c++ 中从 txt 文件中提取条目的代码优化问题
- 为什么传递值参数经常使编译器更容易进行代码优化
- 来自MATLAB的代码优化直方图C
- C - 代码优化
- 代码优化子集总和
- 在代码优化过程中,C++11编译器是否会在可能的情况下将局部变量转换为右值
- C++-筛选Atkin代码优化
- 协议缓冲区 GetRepeatedField (反射) 代码优化
- C++代码优化
- 编译和代码优化
- C++ ARM 设备上代码优化的提示
- 我是否应该将 const 用于局部变量以获得更好的代码优化
- 用于并行计算的C++代码优化示例
- gcc/C++:如果CPU负载很低,那么代码优化用处不大,这是真的
- 反转每个单词在一个句子中使用c++需要代码优化我的代码片段
- 是我的编译器将适当的代码优化为无用的崩溃代码
- Arduino代码优化的多路复用LED矩阵
- 在代码优化中使用new运算符是否值得?