@time 2019-07-20
@author Ruo_Xiao
举栗说明,不同的编译方式结果不一样。
#include <iostream>
int main()
{
int i;
int b;
std::cout << "&i - &b " << (long long)&i - (long long)&b << std::endl;
std::cin.get();
return 0;
}
Debug,结果为:12
Release,结果为:4
为什么 Debug 和 Release 的两个变量的地址的差值不一样呢?按理说局部变量依次压入一个栈帧中,两个变量应该是按照内存对齐原则挨在一起的,但为什么只有 Release 的结果是正确的,而 Debug 是不对的呢。那是因为 Debug 版的程序含有大量的调试信息,这些调试信息会在变量前后各占4个字节,再加上 i 本身的内存,故占了12个字节。
(SAW:Game Over!)