国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當(dāng)前位置:首頁(yè) > 學(xué)習(xí)資源 > 講師博文 > C語(yǔ)言-變量存儲(chǔ)方式

C語(yǔ)言-變量存儲(chǔ)方式 時(shí)間:2025-01-16      來(lái)源:華清遠(yuǎn)見(jiàn)

程序段的內(nèi)存布局

在C程序中,內(nèi)存通常分為幾個(gè)主要區(qū)域:

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

2. 數(shù)據(jù)段(.data段) - 存放已初始化的全局和靜態(tài)變量。

3. BSS段(.bss段) - 存放未初始化的全局和靜態(tài)變量。

4. 堆區(qū) - 動(dòng)態(tài)分配內(nèi)存(例如通過(guò)malloc)。

5. 棧區(qū) - 存放局部變量和函數(shù)參數(shù)。

1. 局部變量

定義:局部變量是在函數(shù)或代碼塊內(nèi)部聲明的變量。

存在位置:

· 棧區(qū)(Stack):局部變量存儲(chǔ)在程序的棧區(qū)。當(dāng)一個(gè)函數(shù)被調(diào)用時(shí),棧區(qū)會(huì)為該函數(shù)的局部變量分配內(nèi)存。當(dāng)函數(shù)執(zhí)行結(jié)束后,這部分內(nèi)存會(huì)被自動(dòng)釋放。

特點(diǎn):

· 作用域:局部變量只能在其聲明的函數(shù)或代碼塊內(nèi)使用。外部無(wú)法訪問(wèn)。

· 生命周期:局部變量的生命周期從定義時(shí)開(kāi)始,到函數(shù)結(jié)束時(shí)結(jié)束。

測(cè)試程序概念圖:

2. 全局變量

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

存在位置:

· 數(shù)據(jù)區(qū)(Data Segment):全局變量存儲(chǔ)在程序的靜態(tài)數(shù)據(jù)區(qū)(也稱為數(shù)據(jù)段)。這個(gè)區(qū)域在程序啟動(dòng)時(shí)分配內(nèi)存,并在整個(gè)程序運(yùn)行期間保持有效。

特點(diǎn):

· 作用域:全局變量可以在任何函數(shù)內(nèi)訪問(wèn),任何地方都可以使用。

· 生命周期:全局變量的生命周期與整個(gè)程序的運(yùn)行時(shí)間相同,直到程序結(jié)束。

測(cè)試程序概念圖:

3. 動(dòng)態(tài)申請(qǐng)的數(shù)據(jù)

定義:動(dòng)態(tài)申請(qǐng)的數(shù)據(jù)是指在程序運(yùn)行時(shí),根據(jù)需要?jiǎng)討B(tài)分配內(nèi)存的一種變量,通常通過(guò)如 malloc、calloc 或 new 等函數(shù)申請(qǐng)。

存在位置:

· 堆區(qū)(Heap):動(dòng)態(tài)申請(qǐng)的數(shù)據(jù)存儲(chǔ)在堆區(qū)。堆區(qū)的內(nèi)存分配和釋放由程序員手動(dòng)管理。

特點(diǎn):

· 作用域:動(dòng)態(tài)分配的內(nèi)存可以在多個(gè)函數(shù)之間共享,直到顯式釋放。

· 生命周期:生命周期由程序員控制,內(nèi)存不再需要時(shí)需要手動(dòng)釋放(使用 free 或 delete)以避免內(nèi)存泄漏。

測(cè)試程序概念圖:

代碼測(cè)試:


結(jié)果:

查看內(nèi)存映射:

內(nèi)存映射解釋:

第一行 555ce2a81000-555ce2a82000 r-xp:

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

權(quán)限 r-xp 表明它可讀且可執(zhí)行,這符合代碼段的特性。

第二行 555ce2c81000-555ce2c82000 r--p:

這里的權(quán)限為 r--p,表明這個(gè)段是可讀的,不可執(zhí)行,只讀段 

第三行 555ce2c82000-555ce2c83000 rw-p: 

權(quán)限 rw-p 表示可讀可寫(xiě),因此這個(gè)段通常是 .bss段,用于存放未初始化的全局和靜態(tài)變量,或者是.data 段,用來(lái)存放 已初始化的全局和靜態(tài)變量。 

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

權(quán)限r(nóng)w-p 表示可讀可寫(xiě),這塊有說(shuō)明是heap堆區(qū),由程序員進(jìn)行分配回收

第十五行 7ffd6b3a6000-7ffd6b3c7000 rw-p:

權(quán)限r(nóng)w-p 表示可讀可寫(xiě),這塊有說(shuō)明是棧區(qū)

 總結(jié)

由測(cè)試代碼可知雖然topo在func函數(shù)結(jié)束后在main程序還能打印,那是因?yàn)殡m然釋放topo空間,但是這塊空間并沒(méi)有被占用,所以程序并沒(méi)有出錯(cuò)。

所以我們根據(jù)測(cè)試記錄可得出以下結(jié)論。

這些變量的存儲(chǔ)位置和管理方式是理解計(jì)算機(jī)程序運(yùn)行機(jī)制的基礎(chǔ):

· 局部變量在棧中,具有局部作用域;

· 全局變量在數(shù)據(jù)區(qū),具有全局作用域;

· 動(dòng)態(tài)申請(qǐng)的數(shù)據(jù)在堆中,生命周期靈活,但需要手動(dòng)管理

上一篇:堆棧溢出的原因

下一篇:在深度學(xué)習(xí)中使用Dropout技術(shù)的動(dòng)機(jī)和它如何防止過(guò)擬合

戳我查看嵌入式每月就業(yè)風(fēng)云榜

點(diǎn)我了解華清遠(yuǎn)見(jiàn)高校學(xué)霸學(xué)習(xí)秘籍

猜你關(guān)心企業(yè)是如何評(píng)價(jià)華清學(xué)員的

干貨分享
相關(guān)新聞
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2024 北京華清遠(yuǎn)見(jiàn)科技發(fā)展有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部