读书人

怎么阻止编译器因优化而缩短对象生命周

发布时间: 2012-08-25 10:06:20 作者: rapoo

怎样阻止编译器因优化而缩短对象生命周期?
1.

C/C++ code
AutoLock(Object.GetSyncObject());


2.
C/C++ code
AutoLock(Object.GetSyncObject()) locker;


第一种方案无法完成加锁动作
第二种方案可以完成加锁动作,但是不能排除编译器什么时候就把他优化了。


现在的要求是,阻止编译对其的优化,而保留全局和函数其他地方的优化。

How can I do it?

[解决办法]
一般来说,有复杂构造函数的类对象是不会优化的。你用的啥编译器,啥编译选项,这么强劲?
[解决办法]
加volatile限定

有的编译器也有相关的禁用代码段优化指导
[解决办法]
探讨

引用:

一般来说,有复杂构造函数的类对象是不会优化的。你用的啥编译器,啥编译选项,这么强劲?


第一种方案构造后立即析构
第二种方案Debug下可以完成加锁动作,Release未知

[解决办法]
证明问题确实存在后再讨论解决方案。否则就是杞人忧天了。
你在挑战C++界赖以自豪的raii啊。


探讨
引用:

引用:

引用:

一般来说,有复杂构造函数的类对象是不会优化的。你用的啥编译器,啥编译选项,这么强劲?


第一种方案构造后立即析构
第二种方案Debug下可以完成加锁动作,Release未知


第一种的是临时对象,语句执行完就析构.

第二种....写错了吧.
如果是自动变量是不会有问题的.
编译器的……

[解决办法]

读书人网 >C++

热点推荐