常量折叠和debug填充114

先看常量重叠

int main(int argc, char* argv[])
{
    const int i=0;
    int *j = (int *) &i;
    *j=1;
    cout<<&i<<endlcout<<j<<endl;
    cout<<i<<endl;
    cout<<*j<<endl;
    return 0;
}

结果是

0012ff7c
0012ff7c

0

1

因为编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏似的: #define pi 3.1415,用到pi时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!

最后注意下:

char* p = "hello world1";//常量区
char a[] = "hello world2";//栈区

看debug下的内存吧

0xcccccccc所有自动变量

0xcdcdcdcd new内存

0xdddddddd delete内存

0xfdfdfdfd 保护堆内存

也就解释了new 老是是铪 妄 等字符。。未赋值的老是-858993460等了

// //