最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++淺析內(nèi)存分區(qū)模型概念與示例

 更新時間:2022年09月10日 10:50:20   作者:玲瓏樓主安  
在了解內(nèi)存分區(qū)之前,我們先來聊一聊為什么要進(jìn)行內(nèi)存分區(qū)。在進(jìn)行了內(nèi)存分區(qū)之后,在不同的區(qū)域存放的數(shù)據(jù),會有不同的生命周期,從而會讓程序員的編程變得更加靈活

初識C++內(nèi)存分區(qū)模型

在了解內(nèi)存分區(qū)之前,我們先來聊一聊為什么要進(jìn)行內(nèi)存分區(qū)。在進(jìn)行了內(nèi)存分區(qū)之后,在不同的區(qū)域存放的數(shù)據(jù),會有不同的生命周期,從而會讓程序員的編程變得更加靈活。

我們這次討論的內(nèi)存模型是將內(nèi)存劃分為四部分的版本,也是筆者在和黑馬學(xué)習(xí)過程中學(xué)習(xí)到的版本。

而C++在程序運(yùn)行的過程中,將內(nèi)存分為四個區(qū)域:

  • 代碼區(qū)

存放函數(shù)的二進(jìn)制代碼,即CPU執(zhí)行的機(jī)器指令,由操作系統(tǒng)進(jìn)行管理。

  • 全局區(qū)

存放全局變量、靜態(tài)變量(static,分為全局與局部靜態(tài)變量)和部分常量。

  • 棧區(qū)

由編譯器自動分配和釋放,存放函數(shù)的參數(shù)值、局部變量、局部常量等。

  • 堆區(qū)

由程序員進(jìn)行分配和釋放,而如果程序員不釋放,則在程序結(jié)束運(yùn)行時,由操作系統(tǒng)來進(jìn)行回收。

程序運(yùn)行前

程序編譯后,會生成可執(zhí)行程序,而在該程序未執(zhí)行之前,內(nèi)存分為代碼區(qū)和全局區(qū)兩個區(qū)域。

代碼區(qū)

存放函數(shù)的二進(jìn)制代碼,即CPU執(zhí)行的機(jī)器指令,由操作系統(tǒng)進(jìn)行管理。

代碼區(qū)的特性是共享與只讀:

  • 共享:對于被頻繁執(zhí)行的程序,在內(nèi)存中只需要保存一份代碼即可。
  • 只讀:防止程序被意外修改。

全局區(qū)

存放全局變量、靜態(tài)變量(static)和部分常量。

其中部分常量為常量區(qū),即字符串常量和全局常量( const 關(guān)鍵字修飾的全局常量);不包括局部常量。

#程序運(yùn)行后

棧區(qū)

由編譯器自動分配和釋放,存放函數(shù)的參數(shù)值、局部變量、局部常量等。

堆區(qū)

由程序員進(jìn)行分配和釋放,而如果程序員不釋放,則在程序結(jié)束運(yùn)行時,由操作系統(tǒng)來進(jìn)行回收。

主要利用 new 在堆區(qū)開辟內(nèi)存,由 delete 進(jìn)行釋放。

ps:利用 new 常見的數(shù)據(jù),返回的是該數(shù)據(jù)對應(yīng)類型的指針。

內(nèi)存分區(qū)代碼示例

#include <iostream>
using namespace std;
//全局變量 全局區(qū)
int global_a=10;
int global_b=20;
//全局常量 全局區(qū)
const int global_const_a=10;
const int global_const_b=20;
//全局靜態(tài)變量 全局區(qū)
static int static_global_a=10;
static int static_global_b=20;
//形參 棧區(qū)
void func(int a){
    //局部變量 棧區(qū)
    int b=20;
    cout<<"函數(shù)func()的形參 a 的地址為:"<< &a <<endl;
    cout<<"函數(shù)func()的局部變量 b 的地址為:"<< &b <<endl<<endl;
}
int main() {
    cout<<"棧區(qū)"<<endl;
    //局部變量 棧區(qū)
    int a = 10;
    int b = 20;
    cout<<"局部變量 a 的地址為:"<< &a <<endl;
    cout<<"局部變量 b 的地址為:"<< &b <<endl;
    //局部常量 棧區(qū)
    const int const_a=10;
    const int const_b=10;
    cout<<"局部常量 const_a 的地址為:"<< &const_a <<endl;
    cout<<"局部常量 const_b 的地址為:"<< &const_b <<endl;
    //形參 棧區(qū)
    func(a);
    cout<<"全局區(qū)"<<endl;
    cout<<"全局變量 global_a 的地址為:"<< &global_a <<endl;
    cout<<"全局變量 global_b 的地址為:"<< &global_b <<endl;
    cout<<"全局常量 global_const_a 的地址為:"<< &global_const_a <<endl;
    cout<<"全局常量 global_const_a 的地址為:"<< &global_const_b <<endl;
    cout<<"全局靜態(tài)變量 static_global_a 的地址為:"<< &static_global_a <<endl;
    cout<<"全局靜態(tài)變量 static_global_b 的地址為:"<< &static_global_b <<endl;
    //局部靜態(tài)變量 全局區(qū)
    static int Static_a=10;
    static int Static_b=20;
    cout<<"局部靜態(tài)變量 Static_a 的地址為:"<< &Static_a <<endl;
    cout<<"局部靜態(tài)變量 Static_b 的地址為:"<< &Static_b <<endl;
    //字符串常量 全局區(qū)
    cout<<"字符串常量的地址為:"<< &"hello world s1" <<endl;
    cout<<"字符串常量的地址為:"<< &"hello world s2" <<endl<<endl;
    cout<<"堆區(qū)"<<endl;
    //new 堆區(qū)
    int* new_a=new int(10);
    int* new_b=new int(20);
    cout<<"堆區(qū)變量 new_a 的地址為:"<< new_a <<endl;
    cout<<"堆區(qū)變量 new_a 的地址為:"<< new_b <<endl<<endl;
    return 0;
}

運(yùn)行結(jié)果分析如下:

到此這篇關(guān)于C++淺析內(nèi)存分區(qū)模型概念與示例的文章就介紹到這了,更多相關(guān)C++內(nèi)存分區(qū)模型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Matlab實現(xiàn)黑洞優(yōu)化算法的示例代碼

    Matlab實現(xiàn)黑洞優(yōu)化算法的示例代碼

    根據(jù)黑洞現(xiàn)象原理首次提出BH 算法,它在傳統(tǒng)PSO基礎(chǔ)上引入了新的機(jī)制,有效地提高了收斂速度并防止了陷入局部極值的情況發(fā)生.本文將用Matlab實現(xiàn)這一算法,需要的可以參考一下
    2022-06-06
  • C++繼承詳細(xì)介紹

    C++繼承詳細(xì)介紹

    這篇文章主要介紹了C++繼承詳情,在我們進(jìn)行開發(fā)的時候,我們經(jīng)常會遇到抽象出來的類之間具有繼承關(guān)系。一個類繼承了另外一個類,被繼承的類成為基類或父類,繼承的類成為子類或派生類,下面文章的詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01
  • 關(guān)于PCL出現(xiàn)"無法找到?pcl_commond.dll?文件程序無法執(zhí)行"的問題及解決方法

    關(guān)于PCL出現(xiàn)"無法找到?pcl_commond.dll?文件程序無法執(zhí)行"的問題及解決方法

    這篇文章主要介紹了PCL出現(xiàn)"無法找到?pcl_commond.dll?文件程序無法執(zhí)行"的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • c++對象內(nèi)存布局示例詳解

    c++對象內(nèi)存布局示例詳解

    C++類的內(nèi)存布局跟結(jié)構(gòu)體有點(diǎn)像,實際上,類中成員變量的內(nèi)存布局規(guī)則跟結(jié)構(gòu)體是一樣的,區(qū)別在于函數(shù),虛函數(shù)的放置,下面這篇文章主要給大家介紹了關(guān)于c++對象內(nèi)存布局的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • C++實踐數(shù)組作數(shù)據(jù)成員的參考

    C++實踐數(shù)組作數(shù)據(jù)成員的參考

    今天小編就為大家分享一篇關(guān)于C++實踐數(shù)組作數(shù)據(jù)成員的參考,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • C語言編寫漢諾塔游戲

    C語言編寫漢諾塔游戲

    這篇文章主要介紹了C語言編寫漢諾塔游戲,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-11-11
  • 從匯編看c++中函數(shù)里面的static關(guān)鍵字的使用說明

    從匯編看c++中函數(shù)里面的static關(guān)鍵字的使用說明

    c++中的static關(guān)鍵字使得函數(shù)里面的局部變量的存活期不在局限于函數(shù)里面,而是變?yōu)樵谡麄€程序生命期里面都有效
    2013-05-05
  • C++編程之CString、string與、char數(shù)組的轉(zhuǎn)換

    C++編程之CString、string與、char數(shù)組的轉(zhuǎn)換

    這篇文章主要介紹了C++編程之CString、string與、char數(shù)組的轉(zhuǎn)換的相關(guān)資料,希望通過本文能幫助到大家,讓大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C++ 中國象棋的實現(xiàn)流程詳解

    C++ 中國象棋的實現(xiàn)流程詳解

    中國象棋是起源于中國的一種棋,屬于二人對抗性游戲的一種,在中國有著悠久的歷史。由于用具簡單,趣味性強(qiáng),成為流行極為廣泛的棋藝活動
    2021-11-11
  • C++設(shè)計模式之外觀模式(Facade)

    C++設(shè)計模式之外觀模式(Facade)

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計模式之外觀模式(Facade),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評論

进贤县| 阳江市| 凭祥市| 朔州市| 莲花县| 武川县| 沙洋县| 梨树县| 恩施市| 潞西市| 潞西市| 雷波县| 嘉黎县| 甘洛县| 喀喇沁旗| 富平县| 上栗县| 泗水县| 黔东| 巨野县| 赤壁市| 辉县市| 鱼台县| 邢台县| 内丘县| 威远县| 巢湖市| 台江县| 兴国县| 南投市| 安陆市| 西贡区| 武城县| 嘉祥县| 秀山| 玉屏| 郸城县| 清新县| 措勤县| 太康县| 玛曲县|