编译器优化问题
#include <cstdio>
class B {
public:
B( ) { print_this(); printf( "default constructor\n" ); }
~B( ) { print_this(); printf( "destructor\n" ); }
B( int i ) : data( i ) {
print_this(); printf("constructed by parameter%d\n", data );
}
B( const B& b ) { data = b.data; print_this(); printf( "copy constructor\n" ); }
B& operator= ( const B& b ) {
if( this != &b ) {
data = b.data;
print_this();
printf( "copy assignment\n" );
}
return *this;
}
void print_this( ) {
printf( "0x%08x\n", this );
}
private:
int data;
};
B Play( B b )
{
b.print_this( );
return b;
}
int main( )
{
B tmp = Play(5);
}
对输出结果不太明白,编译器是怎么优化的?
class B {
public:
B( ) { print_this(); printf( "default constructor\n" ); }
~B( ) { print_this(); printf( "destructor\n" ); }
B( int i ) : data( i ) {
print_this(); printf("constructed by parameter%d\n", data );
}
B( const B& b ) { data = b.data; print_this(); printf( "copy constructor\n" ); }
B& operator= ( const B& b ) {
if( this != &b ) {
data = b.data;
print_this();
printf( "copy assignment\n" );
}
return *this;
}
void print_this( ) {
printf( "0x%08x\n", this );
}
private:
int data;
};
B Play( B b )
{
b.print_this( );
return b;
}
int main( )
{
B tmp = Play(5);
}
对输出结果不太明白,编译器是怎么优化的?
...全文
相关推荐
一个编译器优化引起的问题
### 编译器优化引起的问题解析在软件开发过程中,特别是嵌入式系统开发领域,编译器优化是一项重要的技术手段,旨在提高程序的运行效率。然而,不当的优化设置有时也会导致意料之外的问题。
编译器优化导致的问题(调试技术)
在讲编译器优化导致程序问题前先要讲讲什么是编译器优化。不同的C语言编译器都会对程序进行一定程度的优化,每种编译器都会划分几种编译优化等级。不同的优化等级对程序的优化程度不同,有对代码空间的优化,有对执行时间的优化。编译器针对不同问题的优化都是基于某种算法的,但是最终的原则是不能改变用户程序的执行逻辑。在大多数情况下这种优化会提高程序的执行效率及优化代码空间,但是有时编译器也会错误的领会程序员的意图,将一些代码优化后造成不可预测的问题。
变量被编译器给优化掉了
在这里,我们可以看到两种方法来解决变量优化的问题,一种是对编译器设置,让编译器编译的时候不要优化。在MDK中,选择优化等级为0。
Keil5的V5编译器
**更新与优化**:保持Keil5和编译器的版本更新,可以解决一些已知的问题并获得更好的性能。此外,了解编译器的优化选项,如-O0至-O3的优化级别,可以在性能和调试便利性之间找到平衡。7.
Android C++编译器
它可能包含了编译器、编辑器和调试工具,便于用户在手机上直接编写和运行C++程序。10. **Readme文件**: Readme文件通常包含关于软件的安装、使用、许可信息和常见问题解答等内容。


