程序运行前

01 程序运行前

在程序编译后,生成了.exe的可执行文件(当然这个 exe 是 windows 环境下的可执行程序了......),未执行程序前分为两个区域:

  1. 代码区

    1. 存放 cpu 执行的机器指令:也就是改为二进制(0101这样的)的代码(写完的代码会变成机器阅读的二进制)。

    2. 代码区是共享的:共享的目的是对于多次、频繁执行的程序,只会在内存中存有一份即可。(比如说生成完了 exe,多次点击执行,内存中只会留有一份这样的代码。)

    3. 代码区是只读的:让代码区只读的原因是防止程序意外的修改了它的指令。(所以说有些外挂是截取内存的,这样子来达到外挂的效果)

  • 总结:代码区是用于存放 cpu 执行的机器指令。它由两个特点:共享只读
  1. 全局区

    1. 存放全局变量和静态变量。

      • 什么是全局变量和局部变量?

        如果一个变量定义在函数体内部,那么它就是局部变量。如果一个变量定义在函数体外部,那么就是全局变量。

        值得注意的是,如果定义在main函数里面,也是局部变量。

        我们可以举个例子:

        #include 
        using namespace std;
        int c = 10;
        int d = 20;
        int main()
        {
        int a = 10;
        int b = 20;
        system("pause");
        return 0;
        }

        那么在这个例子里面,全局变量是c d,而局部变量是a b

      • 什么是静态变量?

        在普通的变量前添加static就属于静态变量。

        #include 
        using namespace std;
        int main()
        {
        static int s_a = 100;
        static int s_b = 100;
        system("pause");
        return 0;
        }

        在这个例子里面,s_a s_b就属于静态变量。

    2. 全局区内部有一个常量区,存放字符串常量和其他常量。

      • 什么是字符串常量?

        字符串常量就是用双引号("")引起来的内容。比如说"helloworld" "woshishabi"这些就属于字符串常量。

      • 什么是其他常量?

        这里的其他常量就是指的是const修饰的变量(const修饰之后就会变为只读)。但是,const 修饰的变量还要分为两个部分:

        1. const 修饰的全局变量(也称做:全局常量)
        2. const 修饰的局部变量(也称做:局部常量)

        我们可以举个例子:

        #include 
        using namespace std;
        const c_g_a = 10;
        const c_g_b = 10;
        int main()
        {
        const c_l_a = 10;
        const c_l_b = 10;
        system("pause");
        return 0;
        }

        在这个例子里面,c_g_a c_g_b就是 const 修饰的全局变量,也称之为全局常量。而c_l_a c_l_b是 const 修饰的局部变量,也称之为局部常量。

    3. 这个区域的数据,在程序运行结束后,由操作系统释放其内存。

      我们可以用一段代码试一试:(具体可以翻源文件,这边把注释去掉了,注释内容就是上面的笔记)

      #include 
      using namespace std;
      
      //创建全局变量
      
      int c = 10;
      int d = 20;
      const int c_c = 10;
      const int c_d = 20;
      int main()
      {
      int a = 10;
      int b = 20;
      cout << "局部变量 a 的地址为:" << (int)&a << endl;
      cout << "局部变量 b 的地址为:" << (int)&b << endl;
      cout << endl;
      cout << "全局变量 c 的地址为:" << (int)&c << endl;
      cout << "全局变量 d 的地址为:" << (int)&d << endl;
      cout << endl;
      static int s_a = 100;
      static int s_b = 100;
      cout << "静态变量 s_a 的地址为:" << (int)&s_a << endl;
      cout << "静态变量 s_b 的地址为:" << (int)&s_b << endl;
      cout << endl;
      cout << "字符串常量的地址为:" << (int)&"hello world" << endl;
      cout << "字符串常量的地址为:" << (int)&"woshishabi" << endl;
      cout << endl;
      const int c_a = 100;
      const int c_b = 100;
      cout << "全局常量 c_c 的地址为:" << (int)&c_c << endl;
      cout << "全局常量 c_d 的地址为:" << (int)&c_d << endl;
      cout << endl;
      cout << "const修饰的变量 c_a 的地址为:" << (int)&c_a << endl;
      cout << "const修饰的变量 c_b 的地址为:" << (int)&c_b << endl;
      system("pause");
      return 0;
      }

      运行结果:

      局部变量 a 的地址为:-810550588
      局部变量 b 的地址为:-810550576
      
      全局变量 c 的地址为:1195966464
      全局变量 d 的地址为:1195966468
      
      静态变量 s_a 的地址为:1195966472
      静态变量 s_b 的地址为:1195966476
      
      字符串常量的地址为:1195958080
      字符串常量的地址为:1195958096
      
      全局常量 c_c 的地址为:1195957168
      全局常量 c_d 的地址为:1195957172
      
      const修饰的变量 c_a 的地址为:-810550564
      const修饰的变量 c_b 的地址为:-810550552
      请按任意键继续. . .

      仔细观察会发现,有些的内存是比较靠近的。而有些则不是。根据上面我们可以总结:

      放在全局区的数据有:

      1. 全局变量
      2. 静态变量(ststic 关键字)
      3. 字符串常量
      4. 全局常量(const 修饰的全局变量)

      没由存放在全局区的数据有:

      1. 局部变量
      2. 局部常量(const 修饰的局部变量)
  • 总结:全局区存放:全局变量、静态变量和常量。而常量区存放:const 修饰的全局常量和字符串常量。
文章「程序运行前」,由本站用户「Admin」发布。文章仅代表Admin观点,不代表本站立场。
页面网页地址「https://xiaozhiyuqwq.top/p/816」。
如您对文章及其附件提出版权主张,或进行引用转载等,请查看我们的【版权声明】
无评论:-)

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇