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

C++程序內(nèi)存棧區(qū)與堆區(qū)模型案例分析

 更新時間:2022年03月30日 09:22:16   作者:Zachery.  
一直以來總是對這個問題的認識比較朦朧,我相信很多朋友也是這樣的,總是聽到內(nèi)存一會在棧上分配,一會又在堆上分配,那么它們之間到底是怎么的區(qū)別呢,讓我們一起來看看

棧區(qū):

由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量等(由編譯器管理其“生死”)

注意事項:不要返回局部變量的地址,棧區(qū)開辟的數(shù)據(jù)由編譯器自動釋放

棧區(qū)代碼演示:

//內(nèi)存四區(qū)-棧區(qū)
/* 棧區(qū):
由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量等(由編譯器管理其“生死”)
注意事項:不要返回局部變量的地址,棧區(qū)開辟的數(shù)據(jù)由編譯器自動釋放
*/
#include <iostream>
using namespace std;
 
//棧區(qū)數(shù)據(jù)注意事項 --- 不要返回局部變量的地址
//棧區(qū)數(shù)據(jù)由編譯器管理開辟和釋放
 
int * func(int b) //形參數(shù)據(jù)也會放到棧區(qū)
{
    b = 100;
    int a = 10; //局部變量 存放在棧區(qū),棧區(qū)的數(shù)據(jù)在函數(shù)執(zhí)行完后自動釋放,當此函數(shù)執(zhí)行完,棧上的數(shù)據(jù)就清空了
    retern &a;  //返回局部變量的地址
}
int main() {
 
    //接受func函數(shù)的返回值
    int * p = finc(1);
    cout << *p << endl; //第一次可以打印正確的數(shù)字,是因為編譯器做了一次保留
    cout << *p << endl; //第二次這個數(shù)據(jù)就不再保留了
 
    return 0;
}

堆區(qū):

由程序員分配釋放,若程序員不釋放,程序結(jié)束后由操作系統(tǒng)回收(運行期間你不管,它就不釋放。運行結(jié)束就給他回收掉)

在C++中主要利用new在堆區(qū)開辟內(nèi)存

堆區(qū)代碼演示:

/* 堆區(qū):
 * 由程序員分配釋放,若程序員不釋放,程序結(jié)束后由操作系統(tǒng)回收(運行期間你不管,它就不釋放。運行結(jié)束就給他回收掉)
 * 在C++中主要利用new在堆區(qū)開辟內(nèi)存
 */
#include <iostream>
using namespace std;
 
int * func()
{
    //利用new關鍵字 可以將數(shù)據(jù)開辟到堆區(qū)
    //指針本質(zhì)也是局部變量,放在棧上,指針保存的數(shù)據(jù)是放在堆區(qū)
    int * p = new int (10); //用指針去接收這塊內(nèi)存,new創(chuàng)建這塊內(nèi)存,把地址返回給你
    return p;
}
int main() {
    //在堆區(qū)開辟數(shù)據(jù)
    int *p = func();
    
    cout << *p << endl;
    cout << *p << endl;
    cout << *p << endl;
    cout << *p << endl; //一直存活
    
    return 0;
}

new操作符:

C++中利用new操作符在堆區(qū)開辟數(shù)據(jù)

堆區(qū)開辟數(shù)據(jù),由程序員手動開辟,手動釋放,釋放利用操作符delete

語法:new 數(shù)據(jù)類型

利用new創(chuàng)建的數(shù)據(jù),會返回該數(shù)據(jù)對應的類型的指針

new操作符代碼演示:

#include <iostream>
using namespace std;
 
//1、new的基本語法
int * func()
{
    //在堆區(qū)創(chuàng)建整型數(shù)據(jù)
    //new返回的是:該數(shù)據(jù)類型的指針
    int * p = new int(10);
    return p;
}
 
void test01()
{
    int * p = func();
    cout << *p << endl;
    cout << *p << endl;
    cout << *p << endl;
    //堆區(qū)的數(shù)據(jù)由程序員管理開辟,程序員管理釋放
    //如果想釋放堆區(qū)的數(shù)據(jù),利用關鍵字delete
    delete p;
    cout << *p << endl; //此處程序報錯:內(nèi)存已經(jīng)釋放,再去訪問就是非法操作
}
 
//2、在堆區(qū)利用new開辟數(shù)組
void test02()
{
    //創(chuàng)建10整型數(shù)據(jù)的數(shù)組,在堆區(qū)
    int * arr = new int [10]; //10代表數(shù)組有10個元素
    for(int i=0;i<10;i++)
    {
        arr[i]=i+100;//給10個元素賦值100~109
 
    }
    for(int i=0;i<10;i++)
    {
        cout<<arr[i]<<endl;
    }
    //釋放堆區(qū)數(shù)組
    //釋放數(shù)組的時候,要加一個[]才可以
    delete[] arr;
}
int main() {
    //test01();
    test02();
 
 
    return 0;
}

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

相關文章

  • DevC++如何自定義頭文件并使用

    DevC++如何自定義頭文件并使用

    文章介紹了如何在DevC++中自定義頭文件并使用,首先創(chuàng)建一個項目,然后新建一個頭文件并編寫代碼,保存后創(chuàng)建一個源文件并將其放在項目目錄下
    2024-11-11
  • C語言中實現(xiàn)KMP算法的實例講解

    C語言中實現(xiàn)KMP算法的實例講解

    KMP算法即字符串匹配算法,C語言中KMP可以避免指針回溯從而達到高效,接下來就來總結(jié)一下C語言中實現(xiàn)KMP算法的實例講解
    2016-06-06
  • C++ Boost MultiIndex使用詳細介紹

    C++ Boost MultiIndex使用詳細介紹

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • 使用C++一步步實現(xiàn)俄羅斯方塊

    使用C++一步步實現(xiàn)俄羅斯方塊

    本文給大家分享的是作者在使用C++制作俄羅斯方塊的時候的思路分析以及開發(fā)準備和實驗原理,都是些基礎的知識儲備,希望大家能夠喜歡,具體的代碼我們下一節(jié)再分享給大家
    2017-12-12
  • C語言實現(xiàn)出棧序列合法性判定

    C語言實現(xiàn)出棧序列合法性判定

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)出棧序列合法性判定,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 一個string類的簡單實現(xiàn)案例

    一個string類的簡單實現(xiàn)案例

    下面小編就為大家?guī)硪黄粋€string類的簡單實現(xiàn)案例。小編覺得挺不錯的現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 用C語言實現(xiàn)掃雷游戲

    用C語言實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細介紹了用C語言實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C/C++可變參數(shù)函數(shù)的實現(xiàn)

    C/C++可變參數(shù)函數(shù)的實現(xiàn)

    這篇文章主要介紹了C/C++可變參數(shù)函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • C語言學生學籍管理系統(tǒng)課程設計

    C語言學生學籍管理系統(tǒng)課程設計

    這篇文章主要介紹了C語言學生學籍管理系統(tǒng)課程設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++實現(xiàn)猴子吃桃的示例代碼

    C++實現(xiàn)猴子吃桃的示例代碼

    這篇文章主要介紹了C++實現(xiàn)猴子吃桃的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02

最新評論

安多县| 张家港市| 凤翔县| 合江县| 丹巴县| 横山县| 睢宁县| 同德县| 开江县| 吐鲁番市| 贵州省| 密云县| 安平县| 梅州市| 如东县| 志丹县| 神农架林区| 汨罗市| 云龙县| 边坝县| 尼玛县| 玉林市| 宁德市| 华池县| 克什克腾旗| 沂水县| 会昌县| 彰化县| 鲁甸县| 天门市| 廉江市| 凯里市| 射洪县| 乌恰县| 博兴县| 敦化市| 天峨县| 龙海市| 东平县| 石棉县| 嘉定区|