变量在内存中的位置

 

全局变量与局部变量
作用域
全局变量
1、作用于所在的模块。
2、在PE结构中,全局变量位于.data节
3、通过立即数寻址。

局部变量
1、与所在函数的作用域一样。
2、所在地址为栈上。
3、通过EBP或ESP进行寻址。

 

#include "pch.h"
#include <iostream>
#define CONST 888

int gInt = 666;

int main()
{
    /*
    这就是C++中的常量折叠:指const变量(即常量)值放在编译器的符号表中,计算时编译器直接从表中取值,
    省去了访问内存的时间,从而达到了优化。

    而在此基础上加上volatile修改符,即告诉编译器该变量属于易变的,不要对此句进行优化,
    每次计算时要去内存中取数。

    这里也有个小细节:每种编译器对volatile修饰符的修饰作用效果不一致,有的就直接“不理会”
    */
    const volatile int a = 12345;
    int *p = (int *)&a;
    *p = 456;
    const char *cp = "linux";
    //*cp = "L"; 报错
    printf("a = %d\n",a);

    int lint = 555;
    printf("lint = %d ,gInt = %d\n", lint, gInt);

    std::cout << "Hello World!\n"; 
    system("pause");
}

 

posted @ 2019-08-17 14:26  狂奔~  阅读(771)  评论(0编辑  收藏  举报