debug版本和release版本

运行代码

#include<iostream>
using namespace std;

static void prindAddress(int a, int b, int c){
   cout<<"a"<< a <<" "<<&a<<endl;
   cout<<"b"<< b <<endl;
   cout<<"c"<< c <<" "<< &c << endl;
}
int main(int argc, char** argv){
   prindAddress(1,2,3);
   return 0;
}

release版本输出结果:

debug版本输出结果:

仔细观察,可以发现release版本的结果中,a与c的值差为4,debug版本的结果中,a和c的结果直差为8.为什么?

原因:

四个字节被优化掉了。

32位系统——调用函数是通过栈来传递参数,我们打印的地址实际上是在栈里面位置的地址

64位系统——函数传参绝大多数不同通过栈来传输的,而是通过寄存器。默认情况下,前六个参数都可以通过寄存器来进行传输,这就减少了栈的使用。64位操作系统速度快,不仅仅是因为内存寻址变大了,可使用的寄存器的数目也变大了。

打印b的时候,我们只是打印了b的值,所以只是通过寄存器,没有通过内部的栈,因此系统只给a和c的地址预留好栈,所以地址只差会发生改变。

Debug版本主要是方便调试。Debug版本的代码没有经过优化,有问题可以比较准确的定位到哪个文件,哪一行附近。但debug版本没进过优化,所以一般生成的文件比较大,运行效率比较慢, 在一些大的系统中甚至要慢一个数量级以上。

来源:https://bbs.csdn.net/topics/391991962?page=1

猜你喜欢

转载自blog.csdn.net/qq_29996285/article/details/84646026