久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 學習資源 > 講師博文 > C語(yu)言-變(bian)量存儲方式

C語言-變量存儲方式 時(shi)間(jian):2025-01-16      來源:華清(qing)遠見

程序段的內存布局

在C程序(xu)中,內(nei)存通常分(fen)為幾個主要區域:

1. 代碼段(.text段) - 存放(fang)程序(xu)的指(zhi)令。

2. 數據段(.data段) - 存放已初始(shi)化的全局和靜態變量。

3. BSS段(.bss段) - 存放未(wei)初始化的全局(ju)和靜態變量(liang)。

4. 堆區 - 動態分配內存(例如通過malloc)。

5. 棧區 - 存放局部變量和函數參數

1. 局部變量

定義:局部變量是在函數或(huo)代碼塊(kuai)內(nei)部聲(sheng)明的(de)變量。

存在位置:

· 棧(zhan)區(qu)(Stack):局(ju)部變量存儲在程序的棧(zhan)區(qu)。當(dang)一個函(han)數被調用時(shi),棧(zhan)區(qu)會(hui)(hui)為(wei)該函(han)數的局(ju)部變量分(fen)配內存。當(dang)函(han)數執行結束(shu)后,這部分(fen)內存會(hui)(hui)被自動釋(shi)放(fang)。

特點:

· 作用域:局部變量(liang)只能在其聲明的函數或代碼塊內使用。外(wai)部無法訪問。

 · 生命周期:局部變量的生命周期從定(ding)義時開始(shi),到函數結束時結束。

測試程序概念(nian)圖(tu):

2. 全局變量

 定義:全局變(bian)量是(shi)在所有函數外部聲明的變(bian)量,可以被程序中任(ren)何函數訪問。

存在位置:

· 數據區(Data Segment):全(quan)局變量存(cun)儲在(zai)程序(xu)的靜態數據區(也稱為數據段)。這個區域在(zai)程序(xu)啟(qi)動時分配內存(cun),并在(zai)整個程序(xu)運行(xing)期間(jian)保(bao)持有效。

特點:

· 作用域:全局變(bian)量可以(yi)在任何(he)函數內(nei)訪問,任何(he)地方都(dou)可以(yi)使用。

· 生(sheng)命周期:全(quan)局變量的生(sheng)命周期與整(zheng)個程(cheng)序(xu)的運(yun)行(xing)時間相同,直(zhi)到(dao)程(cheng)序(xu)結(jie)束。

測試程(cheng)序概念圖:

3. 動態申請的數據

定義:動(dong)態申(shen)請(qing)的數(shu)據是指(zhi)在程序(xu)運(yun)行時,根據需要動(dong)態分(fen)配內(nei)存的一種變量(liang),通常(chang)通過如 malloc、calloc 或(huo) new 等函數(shu)申(shen)請(qing)。

存在位置:

· 堆區(Heap):動(dong)態申請的數據存儲在(zai)堆區。堆區的內存分(fen)配(pei)和釋放由程序員手(shou)動(dong)管(guan)理。

特點:

· 作(zuo)用域:動態分(fen)配的內存可以(yi)在多個函(han)數之間共享,直到顯式釋放。

· 生(sheng)命(ming)周期:生(sheng)命(ming)周期由程序員控制,內存(cun)不(bu)再需要時(shi)需要手(shou)動釋放(使用 free 或(huo) delete)以避免(mian)內存(cun)泄漏。

測試(shi)程(cheng)序概念圖:

代碼測試:


結果:

查看內存映射:

內存映射解釋:

第一行(xing) 555ce2a81000-555ce2a82000 r-xp:

這個段(duan)通常是 .text 段(duan),表示程(cheng)序的代碼部分。

 權(quan)限 r-xp 表明它可讀且可執(zhi)行,這(zhe)符合(he)代碼段的特性。

第二行(xing) 555ce2c81000-555ce2c82000 r--p:

這(zhe)里(li)的權限為 r--p,表明這(zhe)個段是可(ke)讀的,不可(ke)執行(xing),只讀段 

第(di)三行 555ce2c82000-555ce2c83000 rw-p: 

權限 rw-p 表示(shi)可讀可寫,因此這(zhe)個段(duan)通常是 .bss段(duan),用(yong)(yong)于存放未初(chu)始(shi)化的全局和靜態變量,或者是.data 段(duan),用(yong)(yong)來存放 已(yi)初(chu)始(shi)化的全局和靜態變量。 

第四行555ce460d000-555ce462e000 rw-p:

權限rw-p 表(biao)示可(ke)(ke)讀(du)可(ke)(ke)寫,這塊有說明是(shi)heap堆區,由程序員進行分配回收(shou)

第(di)十五行(xing) 7ffd6b3a6000-7ffd6b3c7000 rw-p:

權(quan)限rw-p 表示(shi)可讀可寫,這塊(kuai)有(you)說明是棧區

 總結

由測試代碼可知(zhi)雖然topo在(zai)func函數結束后(hou)在(zai)main程序還能打(da)印,那是因為雖然釋放topo空(kong)間,但是這塊空(kong)間并(bing)沒有被占用(yong),所以程序并(bing)沒有出錯。

所以我們根據測試記錄可得(de)出(chu)以下(xia)結論。

這些變(bian)量(liang)的存儲位置和管理方式是(shi)理解計算機程(cheng)序運行機制的基礎:

· 局(ju)部變量在(zai)棧(zhan)中,具有局(ju)部作用(yong)域;

 · 全局(ju)變量在數據(ju)區(qu),具有全局(ju)作用(yong)域;

· 動態(tai)申請(qing)的數(shu)據在堆中,生命(ming)周期靈活,但需(xu)要手動管理

上一篇:堆棧溢出的原因

下一篇:在深度學習中使用Dropout技術的動機和它如何防止過擬合

戳(chuo)我查(cha)看嵌入式每月就(jiu)業風云榜

點我了解華清遠見高校(xiao)學(xue)霸學(xue)習(xi)秘(mi)籍

猜你關心(xin)企(qi)業(ye)是如何評價華清學員的(de)

干貨(huo)分(fen)享
相關新(xin)聞
前臺專線:010-82525158 企業培訓洽談專線(xian):010-82525379 院校合(he)作洽談專線:010-82525379 Copyright © 2004-2024 北京華清遠見科技發展有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部