C++核心編程之內(nèi)存分區(qū)詳解
1、內(nèi)存分區(qū)模型:
C++程序在執(zhí)行時(shí),將內(nèi)存大方向劃分成4個(gè)區(qū)域
(1)代碼區(qū):存放安徽念書體的二進(jìn)制代碼,由操作系統(tǒng)進(jìn)行管理的
(2)全局區(qū):存放全局變量和靜態(tài)變量以及常量
(3)棧區(qū):由編譯器自動(dòng)分配釋放,存放函數(shù)的參數(shù)值,局部變量等
(4)堆區(qū):由程序員分配和釋放,若程序員不釋放,程序結(jié)束時(shí)由操作系統(tǒng)回收
內(nèi)存四區(qū)意義:不同區(qū)域存放的數(shù)據(jù),賦予不同的生命周期,給我們更大的靈活編程
2、代碼區(qū):
在程序編譯后,生成了exe可執(zhí)行程序,未執(zhí)行該程序前分為兩個(gè)區(qū)域
代碼區(qū):
(1)存放CPU執(zhí)行的機(jī)器指令(二進(jìn)制的機(jī)器指令)
(2)代碼區(qū)是共享的,共享的目的是對(duì)于頻繁被執(zhí)行的程序,只需要在內(nèi)存中有一份代碼即可
(3)代碼區(qū)是只讀的,使其只讀的原因是防止程序意外地修改了它的指令
3、全局區(qū):
(1)全局變量和靜態(tài)變量存放在此
(2)全局區(qū)還包括了常量區(qū),字符串常量和其他常量也存放在此(字符串常量和const修飾的全局變量)
(3)該區(qū)域的數(shù)據(jù)在程序結(jié)束后由操作系統(tǒng)釋放(不是由我們來(lái)控制的)
不在全局區(qū)中的:
1、局部變量
2、const修飾的局部變量(局部常量)
4、小結(jié):
1.C++中在程序運(yùn)行前分為全局區(qū)和代碼區(qū)
2.代碼區(qū)特點(diǎn)是共享和只讀
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、運(yùn)行結(jié)果:
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
淺談c++性能測(cè)試工具之計(jì)算時(shí)間復(fù)雜度
有時(shí)候除了測(cè)量算法的具體性能指數(shù),我們也會(huì)希望測(cè)試出算法的時(shí)間復(fù)雜度,以便我們對(duì)待測(cè)試的算法的性能有一個(gè)更加直觀的了解。本文將介紹c++性能測(cè)試工具之計(jì)算時(shí)間復(fù)雜度。2021-06-06C++11中的可變參數(shù)模板/lambda表達(dá)式
C++11的新特性可變參數(shù)模板能夠讓我們創(chuàng)建可以接受可變參數(shù)的函數(shù)模板和類模板,相比C++98和C++03,類模板和函數(shù)模板中只能含固定數(shù)量的模板參數(shù),可變參數(shù)模板無(wú)疑是一個(gè)巨大的改進(jìn),這篇文章主要介紹了C++11中的可變參數(shù)模板/lambda表達(dá)式,需要的朋友可以參考下2023-03-03深入了解C語(yǔ)言中的字符串和內(nèi)存函數(shù)
本文主要帶大家來(lái)學(xué)習(xí)一些常用的庫(kù)函數(shù)。有了這些庫(kù)函數(shù),我們可以更加方便地操作字符串和內(nèi)存,從而提升我們的編碼效率。話不多說(shuō),我們開(kāi)始吧2022-11-11詳解Qt使用QImage類實(shí)現(xiàn)圖像基本操作
這篇文章主要介紹了Qt如何利用QImage類實(shí)現(xiàn)對(duì)圖像的基本操作,包括圖像顯示、圖像縮放、圖像旋轉(zhuǎn)等,感興趣的小伙伴可以跟隨小編一起動(dòng)手嘗試一下2022-06-06exec()函數(shù)在C++中的應(yīng)用及其用法
exec()函數(shù)在C++中是一個(gè)進(jìn)程控制函數(shù),用于創(chuàng)建新進(jìn)程執(zhí)行其他程序或命令行指令。exec()函數(shù)可以替換當(dāng)前進(jìn)程的代碼和數(shù)據(jù),創(chuàng)建新的進(jìn)程運(yùn)行其他程序。exec()函數(shù)有多個(gè)版本,例如execl、execv、execle、execve等,根據(jù)不同的參數(shù)類型和個(gè)數(shù)來(lái)使用2023-05-05詳解C++編程中的sizeof運(yùn)算符與typeid運(yùn)算符
這篇文章主要介紹了C++編程中的sizeof運(yùn)算符與typeid運(yùn)算符,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01