亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

  • 代碼區(qū)

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

  • 全局區(qū)

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

  • 棧區(qū)

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

  • 堆區(qū)

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

程序運(yùn)行前

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

代碼區(qū)

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

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

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

全局區(qū)

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

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

#程序運(yùn)行后

棧區(qū)

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

堆區(qū)

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

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

ps:利用 new 常見(jiàn)的數(shù)據(jù),返回的是該數(shù)據(jù)對(duì)應(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言二分查找算法及實(shí)現(xiàn)代碼

    C語(yǔ)言二分查找算法及實(shí)現(xiàn)代碼

    本文主要介紹C語(yǔ)言的二分查找算法,這里給大家詳細(xì)介紹了什么是二分查找,并提供代碼實(shí)例,需要的小伙伴可以參考下
    2016-07-07
  • C語(yǔ)言如何實(shí)現(xiàn)循環(huán)輸入

    C語(yǔ)言如何實(shí)現(xiàn)循環(huán)輸入

    這篇文章主要介紹了C語(yǔ)言如何實(shí)現(xiàn)循環(huán)輸入問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • c++ 動(dòng)態(tài)內(nèi)存分配相關(guān)總結(jié)

    c++ 動(dòng)態(tài)內(nèi)存分配相關(guān)總結(jié)

    這篇文章主要介紹了c++ 動(dòng)態(tài)內(nèi)存分配相關(guān)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)和使用c++,感興趣的朋友可以了解下
    2021-02-02
  • C語(yǔ)言大作業(yè)之圖書管理系統(tǒng)的實(shí)現(xiàn)詳程

    C語(yǔ)言大作業(yè)之圖書管理系統(tǒng)的實(shí)現(xiàn)詳程

    隨著網(wǎng)絡(luò)技術(shù)的高速發(fā)展,計(jì)算機(jī)應(yīng)用的普及,利用計(jì)算機(jī)對(duì)圖書館的日常工作進(jìn)行管理勢(shì)在必行,趁著寒假時(shí)間手把手帶你用C語(yǔ)言實(shí)現(xiàn)一個(gè)圖書管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2022-01-01
  • C語(yǔ)言實(shí)現(xiàn)運(yùn)動(dòng)會(huì)管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)運(yùn)動(dòng)會(huì)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)運(yùn)動(dòng)會(huì)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++中overload,override,overwrite的區(qū)別詳細(xì)解析

    C++中overload,override,overwrite的區(qū)別詳細(xì)解析

    以下是對(duì)C++中overload,override,overwrite的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • C++隱式類型轉(zhuǎn)換運(yùn)算符operator type()用法詳解

    C++隱式類型轉(zhuǎn)換運(yùn)算符operator type()用法詳解

    這篇文章主要介紹了C++隱式類型轉(zhuǎn)換運(yùn)算符operator type()用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 一篇文章詳細(xì)解釋C++的友元(friend)

    一篇文章詳細(xì)解釋C++的友元(friend)

    這篇文章主要為大家詳細(xì)介紹了C++的友元(friend),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • C/C++內(nèi)存泄漏原因分析與應(yīng)對(duì)方法

    C/C++內(nèi)存泄漏原因分析與應(yīng)對(duì)方法

    內(nèi)存泄漏會(huì)導(dǎo)致當(dāng)前應(yīng)用程序消耗更多的內(nèi)存,使得其他應(yīng)用程序可用的內(nèi)存更少了,那么為什么會(huì)內(nèi)存泄漏,我們應(yīng)該怎樣應(yīng)對(duì)內(nèi)存泄漏,所以接下來(lái)就給大家詳細(xì)介紹一下C++內(nèi)存泄漏原因分析與應(yīng)對(duì)方法,需要的朋友可以參考下
    2023-07-07
  • MFC命名規(guī)則匯總

    MFC命名規(guī)則匯總

    這篇文章主要介紹了MFC命名規(guī)則,對(duì)于初學(xué)者而言需要牢固掌握這類規(guī)則,需要的朋友可以參考下
    2014-07-07

最新評(píng)論