日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

C++核心編程之內(nèi)存分區(qū)詳解_C 語言

作者:Zachery. ? 更新時間: 2022-05-31 編程語言

1、內(nèi)存分區(qū)模型:

C++程序在執(zhí)行時,將內(nèi)存大方向劃分成4個區(qū)域

(1)代碼區(qū):存放安徽念書體的二進(jìn)制代碼,由操作系統(tǒng)進(jìn)行管理的

(2)全局區(qū):存放全局變量和靜態(tài)變量以及常量

(3)棧區(qū):由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量等

(4)堆區(qū):由程序員分配和釋放,若程序員不釋放,程序結(jié)束時由操作系統(tǒng)回收

內(nèi)存四區(qū)意義:不同區(qū)域存放的數(shù)據(jù),賦予不同的生命周期,給我們更大的靈活編程

2、代碼區(qū):

在程序編譯后,生成了exe可執(zhí)行程序,未執(zhí)行該程序前分為兩個區(qū)域

代碼區(qū):

(1)存放CPU執(zhí)行的機(jī)器指令(二進(jìn)制的機(jī)器指令)

(2)代碼區(qū)是共享的,共享的目的是對于頻繁被執(zhí)行的程序,只需要在內(nèi)存中有一份代碼即可

(3)代碼區(qū)是只讀的,使其只讀的原因是防止程序意外地修改了它的指令

3、全局區(qū):

(1)全局變量和靜態(tài)變量存放在此

(2)全局區(qū)還包括了常量區(qū),字符串常量和其他常量也存放在此(字符串常量和const修飾的全局變量)

(3)該區(qū)域的數(shù)據(jù)在程序結(jié)束后由操作系統(tǒng)釋放(不是由我們來控制的)

不在全局區(qū)中的:

1、局部變量? ?

2、const修飾的局部變量(局部常量)

4、小結(jié):

1.C++中在程序運行前分為全局區(qū)和代碼區(qū)

2.代碼區(qū)特點是共享和只讀

3.全局區(qū)中存放全局變量、靜態(tài)變量、常量

4.常量區(qū)中存放const修飾的全局常量和字符串常量

5、代碼演示:

//程序的內(nèi)存模型-內(nèi)存四區(qū)-全局區(qū)
#include <iostream>
using namespace std;
//1 全局變量
int g_a = 10;
int g_b = 10;
//const修飾的全局變量,全局常量
const int c_g_a = 10;
const int c_g_b = 10;
int main() {
    //2 創(chuàng)建普通局部變量
    int a = 10;
    int b = 10;
    cout << "The address of local variable a is: " << &a << endl;
    cout << "The address of local variable b is: " << &b << endl;
    cout << "Global variable g_a's address is: " << &g_a << endl;
    cout << "Global variable g_b's address is: " << &g_b << endl;
    //3 靜態(tài)變量 在普通變量前面加static,屬于靜態(tài)變量
    static int s_a = 10;
    static int s_b = 10;
    cout << "The address of static variable s_a is: " << &s_a << endl;
    cout << "The address of static variable s_b is: " << &s_b << endl;
    //4 常量
    //4.1 字符串常量
    cout << "The address of the string constant is: " << &"Hello World" << endl;
    //4.2 const修飾的變量
    //4.2.1 const修飾的全局變量
    cout << "Global constant c_g_a's address is: " << &c_g_a << endl;
    cout << "Global constant c_g_b's address is: " << &c_g_b << endl;
    //4.2.2 const修飾局部變量
    const int c_l_a = 10;
    const int c_l_b = 10;
    cout << "Local constant c_l_a's address is: " << &c_l_a << endl;
    cout << "Local constant c_l_b's address is: " << &c_l_b << endl;
    return 0;
}

6、運行結(jié)果:

總結(jié)

原文鏈接:https://blog.csdn.net/weixin_48270094/article/details/123658303

欄目分類
最近更新