女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言內(nèi)存五大區(qū)詳解

玩轉(zhuǎn)單片機(jī) ? 來源:玩轉(zhuǎn)單片機(jī) ? 2023-11-03 09:25 ? 次閱讀

相信各位讀者應(yīng)該都聽過堆棧,那么它們是一個(gè)東西呢,還是兩個(gè)東西呢,它們有啥區(qū)別呢,這就是這篇推文介紹的五大內(nèi)存區(qū)。

|棧

棧(Stack):棧是一種自動(dòng)分配和釋放內(nèi)存的區(qū)域,用于存儲(chǔ)函數(shù)的局部變量、函數(shù)參數(shù)、返回值等。棧內(nèi)存的分配和釋放是由編譯器自動(dòng)完成的,它的大小是固定的。當(dāng)函數(shù)調(diào)用結(jié)束時(shí),棧上分配的內(nèi)存會(huì)自動(dòng)釋放。

#include"stdio.h"
#include"stdlib.h"

voidtest_1(unsignedchardata_1,unsignedintdata_2,unsignedchardata_3)
{
printf("data_1addr:0X%x
",&data_1);
printf("data_2addr:0X%x
",&data_2);
printf("data_3addr:0X%x
",&data_3);
unsignedchartemp_1=0;
unsignedchartemp_2=0;
unsignedchartemp_3=0;
printf("temp_1addr:0X%x
",&temp_1);
printf("temp_2addr:0X%x
",&temp_2);
printf("temp_3addr:0X%x
",&temp_3);
}

intmain()
{
test_1(10,11,12);
return0;
}

輸出:

data_1addr:0X61fe00
data_2addr:0X61fe08
data_3addr:0X61fe10
temp_1addr:0X61fdef
temp_2addr:0X61fdee
temp_3addr:0X61fded

解析:

C語言中函數(shù)參數(shù)的地址由于參數(shù)的大小可以不同,因此它們?cè)跅V械南鄬?duì)位置不一定是連續(xù)的。局部變量會(huì)按變量占的空間遞減,棧區(qū)按內(nèi)存地址由高到低方向生長(zhǎng),其最大大小由編譯時(shí)確定,速度快,但自由性差,最大空間不大。

|堆

堆(Heap):堆是一種動(dòng)態(tài)分配和釋放內(nèi)存的區(qū)域,用于存儲(chǔ)程序運(yùn)行期間動(dòng)態(tài)分配的內(nèi)存。堆內(nèi)存的分配和釋放需要手動(dòng)進(jìn)行,常用的函數(shù)有malloc()和free()。堆內(nèi)存的大小是可變的,它的生命周期由開發(fā)人員控制。

#include"stdio.h"
#include"stdlib.h"

intmain()
{
char*j=(char*)malloc(1);
free(j);
printf("add:0X%x
",j);
return0;
}

輸出:

add:0Xad13e0

解析:

堆區(qū)由程序員分配內(nèi)存和釋放。若程序員不釋放,程序結(jié)束時(shí)可能由操作系統(tǒng)回收。堆區(qū)按內(nèi)存地址由低到高方向生長(zhǎng),其大小由系統(tǒng)內(nèi)存/虛擬內(nèi)存上限決定,速度較慢,但自由性大,可用空間大。

|全局區(qū)

全局區(qū)(Global Area):全局區(qū)也稱為靜態(tài)區(qū),用于存儲(chǔ)全局變量和靜態(tài)變量。全局區(qū)在程序啟動(dòng)時(shí)分配,在程序結(jié)束時(shí)釋放。全局變量和靜態(tài)變量的生命周期與程序的運(yùn)行周期相同。全局區(qū)由.bss段 和 .data段組成:


.bss段存儲(chǔ)未初始化的全局變量和靜態(tài)變量。在程序執(zhí)行之前,編譯器會(huì)將.bss段中的變量初始化為0或者空指針。這些變量占據(jù)的內(nèi)存空間在編譯時(shí)已經(jīng)確定,但在程序執(zhí)行時(shí)才真正被分配。

#include"stdio.h"
#include"stdlib.h"

intdata_1;
intdata_2;

intmain()
{
staticintdata_3;
staticintdata_4;
printf("data_1add:0X%x
",&data_1);
printf("data_2add:0X%x
",&data_2);
printf("data_3add:0X%x
",&data_3);
printf("data_4add:0X%x
",&data_4);
return0;
}

輸出:

data_1add:0X407974
data_2add:0X407970
data_3add:0X407030
data_4add:0X407034

.data段存儲(chǔ)已經(jīng)初始化的全局變量和靜態(tài)變量。在程序執(zhí)行之前,編譯器會(huì)為.data段中的變量分配內(nèi)存,并將其初始化為指定的初值。這些變量在程序運(yùn)行期間一直存在,并且其內(nèi)存地址是固定的。

#include"stdio.h"
#include"stdlib.h"

intdata_1=0;
intdata_2=0;

intmain()
{
staticintdata_3=0;
staticintdata_4=0;
printf("data_1add:0X%x
",&data_1);
printf("data_2add:0X%x
",&data_2);
printf("data_3add:0X%x
",&data_3);
printf("data_4add:0X%x
",&data_4);
return0;
}

輸出:

data_1add:0X407030
data_2add:0X407034
data_3add:0X407038
data_4add:0X40703c

可以理解為.bss段是存放未初始化全局變量和靜態(tài)變量的區(qū)域,而.data段是存放已初始化全局變量和靜態(tài)變量的區(qū)域。這樣的劃分可以有效地管理全局變量和靜態(tài)變量的內(nèi)存使用,并且在程序執(zhí)行期間保持其值的一致性。

|常量區(qū)

常量區(qū)(Constant Area):常量區(qū)用于存儲(chǔ)常量數(shù)據(jù),例如字符串常量。這些數(shù)據(jù)在程序運(yùn)行期間保持不變,存儲(chǔ)在只讀內(nèi)存區(qū)域,無法修改。

#include"stdio.h"
#include"stdlib.h"

constintdata_1=100;
constintdata_2=100;

intmain()
{
staticconstintdata_3=100;
staticconstintdata_4=100;
conststaticintdata_5=100;
conststaticintdata_6=100;
printf("data_1add:0X%x
",&data_1);
printf("data_2add:0X%x
",&data_2);
printf("data_3add:0X%x
",&data_3);
printf("data_4add:0X%x
",&data_4);
printf("data_5add:0X%x
",&data_5);
printf("data_6add:0X%x
",&data_6);
return0;
}

輸出:

data_1add:0X404000
data_2add:0X404004
data_3add:0X404070
data_4add:0X404074
data_5add:0X404078
data_6add:0X40407c

|代碼區(qū)

代碼區(qū)(Code Area):代碼區(qū)存儲(chǔ)程序的執(zhí)行代碼,也稱為文本區(qū)。這部分內(nèi)存是只讀的,存儲(chǔ)程序的機(jī)器指令。

9474f650-79dc-11ee-939d-92fbcf53809c.png

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3108

    瀏覽量

    74981
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7630

    瀏覽量

    140224
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4367

    瀏覽量

    64165
  • 堆棧
    +關(guān)注

    關(guān)注

    0

    文章

    183

    瀏覽量

    20035

原文標(biāo)題:C語言|內(nèi)存五大區(qū)

文章出處:【微信號(hào):玩轉(zhuǎn)單片機(jī),微信公眾號(hào):玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一文詳解C語言內(nèi)存管理

    C語言內(nèi)存管理指對(duì)系統(tǒng)內(nèi)存的分配、創(chuàng)建、使用這一系列操作。
    發(fā)表于 07-26 16:04 ?831次閱讀
    一文<b class='flag-5'>詳解</b><b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>內(nèi)存</b>管理

    C語言內(nèi)存管理詳解

    C語言內(nèi)存管理詳解,很不錯(cuò)的一份資料.
    發(fā)表于 08-06 23:14

    C語言指針詳解

    ];//指針的類型是 int(*)[3] (5)int*(*ptr)[4];//指針的類型是int*(*)[4] 怎么樣?找出指針的類型的方法是不是很簡(jiǎn)單? 完整的C語言指針詳解pdf格式文檔電子發(fā)燒友下載地址(共12
    發(fā)表于 07-04 03:34

    內(nèi)存主要分為哪幾個(gè)區(qū)

    一、五大內(nèi)存分區(qū):內(nèi)存分成5個(gè)區(qū),它們分別是堆、棧、自由存儲(chǔ)區(qū)、全局/靜態(tài)存儲(chǔ)區(qū)和常量存儲(chǔ)區(qū)。1
    發(fā)表于 07-15 07:33

    什么是內(nèi)存區(qū)

    什么是內(nèi)存區(qū)
    發(fā)表于 11-29 07:48

    單片機(jī)C語言程序與數(shù)據(jù)存儲(chǔ)的相關(guān)資料分享

    目錄:一、五大內(nèi)存分區(qū)二、C語言程序的存儲(chǔ)區(qū)域三、C語言程序的段四、在C
    發(fā)表于 11-30 06:48

    內(nèi)存區(qū)到底是哪區(qū)

    :大家想過沒有我們用keil寫單片機(jī)的代碼,你的函數(shù)啊、變量啊最終都放在了哪里?我們一直說的內(nèi)存區(qū),到底是哪區(qū)...
    發(fā)表于 01-26 06:34

    C語言的精髓——指針詳解

    C語言的精髓——指針詳解
    發(fā)表于 11-30 14:43 ?17次下載

    C51的符號(hào)和五大語句及關(guān)鍵字等詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是C51的符號(hào)和五大語句及關(guān)鍵字等詳細(xì)資料說明包括了:C語言 基本標(biāo)點(diǎn)符號(hào),函數(shù)書寫格式與函數(shù)調(diào)用,單片機(jī)五大語句
    發(fā)表于 12-11 17:34 ?31次下載
    <b class='flag-5'>C</b>51的符號(hào)和<b class='flag-5'>五大</b>語句及關(guān)鍵字等詳細(xì)資料說明

    單片機(jī)C語言程序與數(shù)據(jù)存儲(chǔ)

    目錄:一、五大內(nèi)存分區(qū)二、C語言程序的存儲(chǔ)區(qū)域三、C語言程序的段四、在C
    發(fā)表于 11-20 20:36 ?12次下載
    單片機(jī)<b class='flag-5'>C</b><b class='flag-5'>語言</b>程序與數(shù)據(jù)存儲(chǔ)

    C語言程序編譯后內(nèi)存地址的分配

    程序內(nèi)存分配1.內(nèi)存分配圖解其中C程序的內(nèi)存分配為棧區(qū)、堆區(qū)、全局
    發(fā)表于 01-13 14:23 ?1次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>程序編譯后<b class='flag-5'>內(nèi)存</b>地址的分配

    C語言怎么建立內(nèi)存的動(dòng)態(tài)分配

    C語言中,全局變量是分配在內(nèi)存中的靜態(tài)存儲(chǔ)區(qū)的,非靜態(tài)的局部變量,包括形參是分配在內(nèi)存中的動(dòng)態(tài)存儲(chǔ)區(qū)
    的頭像 發(fā)表于 03-10 15:30 ?1041次閱讀

    C語言內(nèi)存問題如何解決

    大家好,我是雜燴君。 C 語言內(nèi)存問題,難在于定位,定位到了就好解決了。 這篇筆記我們來聊聊踩內(nèi)存。踩內(nèi)存,通過字面理解即可。本來是操作這一
    的頭像 發(fā)表于 06-22 11:37 ?642次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>內(nèi)存</b>問題如何解決

    如何快速區(qū)分放大區(qū)和飽和區(qū)呢?

    如何快速區(qū)分放大區(qū)和飽和區(qū)呢? 標(biāo)題:快速區(qū)分放大區(qū)和飽和區(qū)的方法 引言: 在電子學(xué)中,放大區(qū)和飽和區(qū)
    的頭像 發(fā)表于 11-23 09:14 ?2396次閱讀

    雙溫控和單溫控的五大區(qū)

    雙溫控和單溫控的五大區(qū)別 雙溫控和單溫控是兩種常見的溫度控制系統(tǒng),它們?cè)跍囟瓤刂圃怼?yīng)用領(lǐng)域、自動(dòng)化程度、精度要求等方面存在顯著差異。下面將詳細(xì)介紹雙溫控和單溫控的五大區(qū)別。 一、溫度控制
    的頭像 發(fā)表于 12-19 11:04 ?7290次閱讀