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

C++程序代碼的五大內(nèi)存分區(qū)方式

 更新時(shí)間:2024年04月23日 10:23:52   作者:csdn_HZW  
這篇文章主要介紹了C++程序代碼的五大內(nèi)存分區(qū)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C++程序代碼的五大內(nèi)存分區(qū)

在講分區(qū)前,我們首先要了解程序運(yùn)行的四個(gè)過程:

預(yù)編譯

預(yù)編譯主要完成以下三個(gè)具體任務(wù):

  • (1)把include中的頭文件復(fù)制到要編譯的源文件中
  • (2)用實(shí)際值代替define文本
  • (3)在調(diào)用宏的地方進(jìn)行宏替換

編譯

編譯的主要功能包括兩個(gè)部分,第一部分是檢查代碼的語法,如果語法錯(cuò)誤則給出錯(cuò)誤提示并結(jié)束編譯,只有在代碼無語法錯(cuò)誤的情況下才能進(jìn)入大二部分。

第二部分是將預(yù)編譯后的文件轉(zhuǎn)換為匯編語言。

匯編

匯編的主要功能是將匯編語言代碼變成目標(biāo)代碼(機(jī)器代碼)

但不進(jìn)行連接,并生成目標(biāo)文件,即二進(jìn)制文件

連接

連接的主要功能是連接目標(biāo)代碼,并生成可執(zhí)行文件。

五大內(nèi)存分區(qū)分別是:棧區(qū),堆區(qū),BSS區(qū),數(shù)據(jù)區(qū),代碼區(qū)

1.棧區(qū)

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

在程序運(yùn)行過程中實(shí)施分配和釋放,棧區(qū)由操作系統(tǒng)自動(dòng)管理,無需程序員手動(dòng)管理。

2.堆區(qū)

堆是由malloc()函數(shù)或者new分配的內(nèi)存塊,使用free或delete來釋放內(nèi)存

堆的申請(qǐng)和釋放由程序員控制,容易導(dǎo)致內(nèi)存泄漏,導(dǎo)致后面代碼無法訪問這片內(nèi)存區(qū)域,程序退出后系統(tǒng)自動(dòng)回收。

3.BSS區(qū)

即Block Started by Symbol

存放的是未初始化的全局變量和未初始化的靜態(tài)變量。

4.data區(qū)

即數(shù)據(jù)區(qū)

存放已初始化的全局變量、靜態(tài)變量和常量數(shù)據(jù)。

5.代碼區(qū)

存放cpu執(zhí)行的機(jī)器指令,代碼區(qū)是可共享,并且是只讀的。

以下是從網(wǎng)上找的一個(gè)例子,看例子能夠更直觀的了解各行代碼在內(nèi)存中的處在哪個(gè)區(qū)

代碼如下:

#include <QCoreApplication>
#include <iostream>
#include<unistd.h>
using namespace std;
int a=0;    //在data區(qū),已初始化的全局變量 
char *p1;   //在BSS區(qū),未初始化的全局變量
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    int b;      //棧區(qū),臨時(shí)變量
    char s[] = "asd";     //棧區(qū),臨時(shí)變量
    char *p2 = "123";     //123是字符串常量,在data區(qū),p2在棧區(qū)
    static int c = 0;    //c是已初始化靜態(tài)變量,在data區(qū)
    const int d = 0;     //棧區(qū),const修飾的變量對(duì)存放位置沒有影響不要被誤導(dǎo)!??!
    static const int e;    //data區(qū)
    p1 = (char *)malloc(10);//分配10個(gè)字節(jié)在堆區(qū)
    return a.exec();
}

補(bǔ)充

static全局變量和普通全局變量的區(qū)別:

  • static全局變量只初始化一次,只能在當(dāng)前文件下使用
  • 普通全局變量可以在別的文件中加extern使用

static局部變量和普通局部變量的區(qū)別:

  • static局部變量只被初始化一次,下一次使用的初始值為上一次的結(jié)果值
  • 普通局部變量如果在函數(shù)中或者在循環(huán)中,當(dāng)函數(shù)或者循環(huán)結(jié)束后也就被回收

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++ 虛函數(shù)實(shí)戰(zhàn)示例詳解

    C++ 虛函數(shù)實(shí)戰(zhàn)示例詳解

    C++抽象基類cap_ops定義設(shè)備操作接口,支持多態(tài),統(tǒng)一管理攝像頭、傳感器等設(shè)備,包含線程控制與資源管理方法,建議使用智能指針和日志,便于擴(kuò)展和維護(hù),本文給大家介紹C++ 虛函數(shù)實(shí)戰(zhàn),感興趣的朋友一起看看吧
    2025-07-07
  • C++ 隨機(jī)數(shù)字以及隨機(jī)數(shù)字加字母生成的案例

    C++ 隨機(jī)數(shù)字以及隨機(jī)數(shù)字加字母生成的案例

    這篇文章主要介紹了C++ 隨機(jī)數(shù)字以及隨機(jī)數(shù)字加字母生成的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C語言實(shí)現(xiàn)文件內(nèi)容按行隨機(jī)排列的算法示例

    C語言實(shí)現(xiàn)文件內(nèi)容按行隨機(jī)排列的算法示例

    這篇文章主要介紹了C語言實(shí)現(xiàn)文件內(nèi)容按行隨機(jī)排列的算法,涉及C語言字符串、數(shù)組遍歷與隨機(jī)數(shù)相關(guān)算法實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • C++ 單例模式的幾種實(shí)現(xiàn)方式研究

    C++ 單例模式的幾種實(shí)現(xiàn)方式研究

    單例模式,可以說設(shè)計(jì)模式中最常應(yīng)用的一種模式了,據(jù)說也是面試官最喜歡的題目。但是如果沒有學(xué)過設(shè)計(jì)模式的人,可能不會(huì)想到要去應(yīng)用單例模式,面對(duì)單例模式適用的情況
    2019-01-01
  • MFC實(shí)現(xiàn)漂亮界面之美化按鈕

    MFC實(shí)現(xiàn)漂亮界面之美化按鈕

    這篇文章主要為大家詳細(xì)介紹了MFC實(shí)現(xiàn)漂亮界面之美化按鈕,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C語言實(shí)現(xiàn)高精度加法的示例代碼

    C語言實(shí)現(xiàn)高精度加法的示例代碼

    高精度的本質(zhì)是將數(shù)字以字符串的形式讀入,然后將每一位分別存放入int數(shù)組中,通過模擬每一位的運(yùn)算過程,來實(shí)現(xiàn)最終的運(yùn)算效果,下面我們就來看看如何通過C語言實(shí)現(xiàn)高精度加法吧
    2023-11-11
  • Qt基于QScrollArea實(shí)現(xiàn)界面嵌套移動(dòng)

    Qt基于QScrollArea實(shí)現(xiàn)界面嵌套移動(dòng)

    在實(shí)際的應(yīng)用場(chǎng)景中,經(jīng)常會(huì)出現(xiàn)軟件界面戰(zhàn)場(chǎng)圖大于實(shí)際窗體大小。本文將利用QScrollArea可以為widget窗體添加滾動(dòng)條,實(shí)現(xiàn)界面嵌套移動(dòng),感興趣的可以了解一下
    2022-06-06
  • 詳解C++函數(shù)模板與分離編譯模式

    詳解C++函數(shù)模板與分離編譯模式

    這篇文章主要介紹了詳解C++函數(shù)模板與分離編譯模式的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C語言中數(shù)組排序淺析

    C語言中數(shù)組排序淺析

    這篇文章主要為大家介紹了C語言算法練習(xí)中數(shù)組元素排序的四種類型,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下
    2022-12-12
  • C語言修煉之路靈根孕育源流出?初識(shí)C言大道生上篇

    C語言修煉之路靈根孕育源流出?初識(shí)C言大道生上篇

    C語言是一門面向過程、抽象化的通用程序設(shè)計(jì)語言,廣泛應(yīng)用于底層開發(fā)。C語言能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器。C語言是僅產(chǎn)生少量的機(jī)器語言以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的高效率程序設(shè)計(jì)語言
    2022-03-03

最新評(píng)論

枞阳县| 铜梁县| 德保县| 富民县| 太保市| 嘉兴市| 常熟市| 巴彦淖尔市| 蛟河市| 东丽区| 斗六市| 潼关县| 新津县| 漯河市| 木兰县| 正镶白旗| 肥乡县| 汉沽区| 兴海县| 桐梓县| 泾源县| 阆中市| 闽清县| 二连浩特市| 高青县| 女性| 南溪县| 锡林郭勒盟| 景泰县| 都江堰市| 田林县| 扬州市| 南雄市| 玛纳斯县| 武宣县| 宁蒗| 汕尾市| 宝山区| 金昌市| 南城县| 和硕县|