欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C/C++內(nèi)存區(qū)域劃分(簡而易懂)

 更新時(shí)間:2021年06月26日 10:27:13   作者:小一!  
C/C++中,內(nèi)存主要分為、堆、棧、全局/靜態(tài)存儲(chǔ)區(qū)和常量存儲(chǔ)區(qū)。本文重點(diǎn)給大家介紹C/C++內(nèi)存區(qū)域劃分的相關(guān)知識(shí),需要的朋友參考下吧

C語言在內(nèi)存中一共分為如下幾個(gè)區(qū)域,分別是:

1. 內(nèi)存棧區(qū): 存放局部變量名;
2. 內(nèi)存堆區(qū): 存放new或者malloc出來的對(duì)象;
3. 常數(shù)區(qū): 存放局部變量或者全局變量的值;
4. 靜態(tài)區(qū): 用于存放全局變量或者靜態(tài)變量;
5. 代碼區(qū):二進(jìn)制代碼。
知道如上一些內(nèi)存分配機(jī)制,有助于我們理解指針的概念。

C/C++不提供垃圾回收機(jī)制,因此需要對(duì)堆中的數(shù)據(jù)進(jìn)行及時(shí)銷毀,防止內(nèi)存泄漏,使用free和delete銷毀new和malloc申請(qǐng)的堆內(nèi)存,而棧內(nèi)存是動(dòng)態(tài)釋放。

C/C++內(nèi)存區(qū)域劃分詳解

C/C++內(nèi)存分布

在這里插入圖片描述

C/C++中,內(nèi)存主要分為、堆、棧、全局/靜態(tài)存儲(chǔ)區(qū)和常量存儲(chǔ)區(qū)。

棧:棧又叫堆棧,就是那些由編譯器在需要的時(shí)候分配,在不需要的時(shí)候自動(dòng)清除的變量的存儲(chǔ)區(qū)。里面的變量通常是局部變量、函數(shù)參數(shù)等,是向下增長的。所謂向下生長的就是,先調(diào)用的棧幀的地址比后調(diào)用的地址大,棧一般大小有幾個(gè)M左右。

#include<iostream>
using namespace std;

void f2()
{
	int b = 0;
	cout << "b:" << &b << endl;
}
void f1()
{
	int a = 0;
	cout <<"a:" <<&a << endl;

	f2();
}
int main()
{
	f1();
	return 0;
}

在這里插入圖片描述

堆:就是那些由new/malloc分配的內(nèi)存塊,他們的釋放編譯器不去管,由我們的應(yīng)用程序去控制,一般一個(gè)new/malloc就要對(duì)應(yīng)一個(gè)delete/free,由程序員主動(dòng)釋放。堆是可以上增長的.意思是先建立的堆的地址小于后建立的堆的地址。

#include<iostream>
using namespace std;

int main()
{
	void* p1 = malloc(10);
	void* p2 = malloc(10);

	cout << p1 << endl;
	cout << p2 << endl;

	return 0;
}

在這里插入圖片描述

數(shù)據(jù)段:存儲(chǔ)全局?jǐn)?shù)據(jù)和靜態(tài)數(shù)據(jù)。
代碼段:可執(zhí)行的代碼/只讀常量

知道了內(nèi)存分布,下面就來做題吧,考驗(yàn)知識(shí)的時(shí)候到了,看看會(huì)做幾題吧

在這里插入圖片描述

是不是前幾題還得心應(yīng)手,后面就有點(diǎn)懵了

在這里插入圖片描述
在這里插入圖片描述

棧和堆的區(qū)別:

棧:由編譯器自動(dòng)分配并且釋放,一般存儲(chǔ)函數(shù)的參數(shù)局部變量等
堆:由程序員分配釋放,若程不釋放則系統(tǒng)釋放

1、申請(qǐng)內(nèi)存方式
棧:由系統(tǒng)自動(dòng)分配,如變量的聲明的同時(shí)會(huì)開辟空間,(int a; 開辟4個(gè)字節(jié)的空間)(靜態(tài)指定)

堆:由程序員申請(qǐng),需要制定大?。▌?dòng)態(tài)分配)
2、系統(tǒng)響應(yīng)的不同

棧:只要剩余空間大于申請(qǐng)內(nèi)存,系統(tǒng)就會(huì)提供,否則會(huì)棧溢出

堆:便歷空閑地址鏈表,找到符合要求的,就刪除該地址分配給程序,內(nèi)存的首地址記錄分配的大小,(方便delete)多余的內(nèi)存回收

3、空間大小不同
棧:連續(xù)的,編譯時(shí)就確定的常數(shù)
堆:不連續(xù),他的上限決定于系統(tǒng)中有效的虛擬內(nèi)存
4、執(zhí)行效率的不同
棧:由系統(tǒng)分配,速度快
堆:程序員分配,速度慢,容易產(chǎn)生內(nèi)存碎片,不過用起來方便

到此這篇關(guān)于C/C++內(nèi)存區(qū)域劃分詳解的文章就介紹到這了,更多相關(guān)C++內(nèi)存劃分內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C++之類和對(duì)象(2)

    詳解C++之類和對(duì)象(2)

    類是創(chuàng)建對(duì)象的模板,一個(gè)類可以創(chuàng)建多個(gè)對(duì)象,每個(gè)對(duì)象都是類類型的一個(gè)變量;創(chuàng)建對(duì)象的過程也叫類的實(shí)例化。每個(gè)對(duì)象都是類的一個(gè)具體實(shí)例(Instance),擁有類的成員變量和成員函數(shù)
    2021-11-11
  • C++之Boost::array用法簡介

    C++之Boost::array用法簡介

    這篇文章主要介紹了C++之Boost::array用法簡介,較為詳細(xì)的分析了Boost::array中的常見用法,并用實(shí)例的形式予以總結(jié)歸納,需要的朋友可以參考下
    2014-10-10
  • C++實(shí)現(xiàn)LeetCode(25.每k個(gè)一組翻轉(zhuǎn)鏈表)

    C++實(shí)現(xiàn)LeetCode(25.每k個(gè)一組翻轉(zhuǎn)鏈表)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(25.每k個(gè)一組翻轉(zhuǎn)鏈表),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++11用兩個(gè)線程輪流打印整數(shù)的實(shí)現(xiàn)方法

    C++11用兩個(gè)線程輪流打印整數(shù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了C++11用兩個(gè)線程輪流打印整數(shù)的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • C++開放封閉原則示例解析

    C++開放封閉原則示例解析

    在如那就的設(shè)計(jì)模式中,不能修改,但可以擴(kuò)展的實(shí)現(xiàn)是一條十分重要的原則,它是開放-封閉原則(The Open-Clossed Principle,簡稱OCP)或開-關(guān)閉原則
    2023-02-02
  • C語言實(shí)現(xiàn)順序表基本操作匯總

    C語言實(shí)現(xiàn)順序表基本操作匯總

    這篇文章主要介紹了C語言實(shí)現(xiàn)順序表基本操作匯總,對(duì)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的朋友有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-07-07
  • 不要被C++(自動(dòng)生成規(guī)則)所蒙騙

    不要被C++(自動(dòng)生成規(guī)則)所蒙騙

    正如標(biāo)題所說,我們不要被C++語法中所描述的那些條條框框所“蒙騙”了。的確,相信這些生成規(guī)則不會(huì)對(duì)我們的編程帶來多大的影響(不會(huì)產(chǎn)生錯(cuò)誤),但是只有了解它們的背后操作,我們才知道編譯器究竟為我們做了什么,感興趣的朋友可以了解下,希望本文對(duì)你有所幫助
    2013-01-01
  • C++虛函數(shù)表實(shí)例分析

    C++虛函數(shù)表實(shí)例分析

    這篇文章主要介紹了C++虛函數(shù)表,對(duì)多態(tài)中用到的虛函數(shù)表進(jìn)行了比較通俗的實(shí)例分析,需要的朋友可以參考下
    2014-09-09
  • char str[] 與 char *str的區(qū)別詳細(xì)解析

    char str[] 與 char *str的區(qū)別詳細(xì)解析

    以下是對(duì)char str[]與char *str的區(qū)別進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下
    2013-09-09
  • Qt實(shí)現(xiàn)打地鼠游戲的方法詳解

    Qt實(shí)現(xiàn)打地鼠游戲的方法詳解

    這篇文章主要和大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)一個(gè)簡單的打地鼠游戲,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-10-10

最新評(píng)論