那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

你知道嵌入式c中各變量存儲位置嗎

Q4MP_gh_c472c21 ? 2018-02-24 13:53 ? 次閱讀

局部變量,局部靜態變量,全局變量,全局靜態變量區別:

局部變量: 棧區

局部靜態變量:靜態區

全局變量: 靜態區的常量區

全局靜態變量:靜態區

在進行C/C++編程時,需要程序員對內存的了解比較精準。經常需要操作的內存可分為以下幾個類別:

1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。

2、堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似于鏈表。

3、全局區(靜態區)(static)—,全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。 - 程序結束后有系統釋放

4、文字常量區 —常量字符串就是放在這里的。 程序結束后由系統釋放

5、程序代碼區—存放函數體的二進制代碼。

以下是一段實際說明的程序代碼:

這是一個前輩寫的,非常詳細

int a = 0; 全局初始化區

char *p1; 全局未初始化區

main()

{

int b; 棧

char s[] = "abc"; 棧

char *p2; 棧

char *p3 = "123456"; 123456在常量區,p3在棧上。

static int c =0; 全局(靜態)初始化區

p1 = (char *)malloc(10);

p2 = (char *)malloc(20);

分配得來得10和20字節的區域就在堆區。

strcpy(p1, "123456"); 123456放在常量區,編譯器可能會將它與p3所指向的"123456"優化成一個地方。

}

C語言的程序中,對變量的使用還有以下幾點需要注意:

1.體中定義的變量通常是在棧上,不需要在程序中進行管理,由編繹器處理。

2.用malloc,calloc,realloc等分配內存的函數所分配的內存空間在堆上,程序必須保證在使用free釋放,否則會發生內存泄漏。

3.所有函數體外定義的是全局變量,加了static后的變量不管是在函數內部或外部都放在全局區。

4.使用const定義的變量將放于程序的只讀數據區。

三:程序中段的使用

下面用一個簡單的例子來說明C語言中變量和段的對應關系。C語言程序中的全局區(靜態區),實際對應著下述幾個段:RO Data; RW Data ; BSS Data.

一般來說,直接定義的全局變量在未初始化數據區,如果該變量有初始化則是在已初始化數據區(RW Data),加上const則將放在只讀數據區。

例:const char ro[ ] = {"this is read only data"}; //只讀數據區

static char rw_1[ ] ={"this is global read write data"}; //已初始化讀寫數據段

char BSS_1[ 100];//未初始化數據段

const char *ptrconst ="constant data";//字符串放在只讀取數據段

int main()

{

short b;//在棧上,占用2個字節

char a[100];//在棧上開辟100個字節,工的值是其首地址

char s[ ]="abcdefg";//s在棧上,占用4個字節

//“abcdefg”本身放置在只讀數據存儲區,占8個字節

char *p1;//p1在棧上,占用4個字節

char *p2="123456";//p2 在棧上,p2指向的內容不能改,

//“123456”在中讀數據區

static char rw_2[ ]={"this is local read write data"};//局部已初始化讀寫數據段

static char BSS_2[100];//局部未初始化數據段

static int c = 0;//全局(靜態)初始化區

p1=(char *)malloc(10 * sizeof(char ) );//分配內存區域在堆區

strcpy(p1,"xxxx");//“XXXX”放在只讀數據區,占5個字節

free(p1);//使用free釋放p1所指向的內存

return 0;

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5092

    文章

    19177

    瀏覽量

    307653
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137709

原文標題:年過完了,加油學習工作吧!你知道嵌入式c中各變量存儲位置嗎?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    是如何理解嵌入式c編程的?

    一、新手常常問的一個問題是c語言和嵌入式c編程有什么區別?而嵌入式工程師一般都會告訴其區別在于嵌入式
    發表于 10-17 13:23

    是如何理解嵌入式c編程的?

    一、新手常常問的一個問題是c語言和嵌入式c編程有什么區別?而嵌入式工程師一般都會告訴其區別在于嵌入式
    發表于 10-22 19:24

    嵌入式開發是如何理解嵌入式C編程的?

    `本文來探討嵌入式開發嵌入式C編程,看看跟您理解的一樣嗎?一、新手常常問的一個問題:C語言和嵌入式
    發表于 03-22 09:38

    知道嵌入式是什么嗎?

    相信很多剛接觸嵌入式的同學,肯定會對嵌入式陌生,而且都不怎么知道嵌入式是干什么的。在這里我想告訴大家什么是嵌入式?
    發表于 09-16 15:19

    是如何理解嵌入式C編程的

    本帖最后由 QQ3511836582 于 2017-4-1 17:09 編輯 期的嵌入式開發學習將和大家討論什么是嵌入式c編程,是如何理解
    發表于 03-07 21:15

    是如何理解嵌入式C編程

    期的嵌入式開發學習將和大家討論什么是嵌入式c編程,是如何理解嵌入式c編程的。在上個篇章我們有簡
    發表于 03-22 10:58

    是如何理解嵌入式c編程的

    嵌入式開發:是如何理解嵌入式c編程的本期的嵌入式開發學習將和大家討論什么是嵌入式
    發表于 05-05 15:11

    嵌入式參數的存儲處理

    嵌入式參數的存儲是怎么處理的?
    發表于 03-30 08:29

    C語言中局部變量存儲位置是如何分配的?

    ADS下C語言中局部變量存儲位置是如何分配的?
    發表于 04-26 06:31

    STM32 內存分配解析及變量存儲位置

    單元的。因此在一些嵌入式系統,比如常用的STM32來講,內存映射被劃分為閃存段(也被稱為Flash,用于存儲代碼和只讀數據)和RAM段,用于存儲讀寫數據。STM32 的 Flash
    發表于 11-26 18:51 ?49次下載
    STM32 內存分配解析及<b class='flag-5'>變量</b>的<b class='flag-5'>存儲位置</b>

    constant變量存儲位置_淺談變量在MCU存儲位置

    局部變量,局部靜態變量,全局變量,全局靜態變量區別:局部變量: 棧區局部靜態變量:靜態區全局
    發表于 11-30 20:06 ?5次下載
    constant<b class='flag-5'>變量</b><b class='flag-5'>存儲位置</b>_淺談<b class='flag-5'>變量</b>在MCU<b class='flag-5'>中</b><b class='flag-5'>存儲位置</b>

    constant變量存儲位置_淺談變量在MCU存儲位置

    局部變量,局部靜態變量,全局變量,全局靜態變量區別:局部變量: 棧區局部靜態變量:靜態區全局
    發表于 11-30 20:06 ?8次下載
    constant<b class='flag-5'>變量</b><b class='flag-5'>存儲位置</b>_淺談<b class='flag-5'>變量</b>在MCU<b class='flag-5'>中</b><b class='flag-5'>存儲位置</b>

    嵌入式C語言中堆和棧的區別

    嵌入式C語言中,堆和棧都是用來存儲變量的內存區域,但它們在存儲和使用變量方面有很大的區別。
    的頭像 發表于 04-14 11:45 ?1479次閱讀

    嵌入式C語言之堆和棧介紹

    嵌入式C語言中,堆和棧都是用來存儲變量的內存區域,但它們在存儲和使用變量方面有很大的區別。
    的頭像 發表于 05-20 15:04 ?3045次閱讀

    如何開發與存儲位置無關的STM32應用?

    如何開發與存儲位置無關的STM32應用?
    的頭像 發表于 10-18 16:46 ?642次閱讀
    如何開發與<b class='flag-5'>存儲位置</b>無關的STM32應用?
    百家乐洗码软件| 现金百家乐| 百家乐官网五湖四海赌场娱乐网规则| 新全讯网网址g5vvv| 赌百家乐官网到底能赌博赢| 大发888网页登录帐号| 有钱人百家乐官网的玩法技巧和规则 | 世嘉百家乐官网的玩法技巧和规则| 顶级赌场连环夺宝下注有什么窍门| 澳门百家乐官网官网www.bjbj100.com| KK百家乐娱乐城| 现场百家乐官网能赢吗| bet365最新地址| 百家乐赌场优势| 澳门百家乐官网有哪些| 大发888娱乐场下载 游戏平台| 泰山百家乐官网的玩法技巧和规则| 赌博游戏| 电子百家乐打法| 百家乐官网号技巧| 明珠| 百家乐制胜秘| 电脑百家乐官网玩| 平博娱乐| 百家乐微乐| 新天地百家乐官网的玩法技巧和规则 | 状元百家乐官网的玩法技巧和规则| 棋牌娱乐城| 百家乐牌九| 茅台百家乐官网的玩法技巧和规则| 永利博国际网| 巴西百家乐的玩法技巧和规则| 全讯网百家乐官网的玩法技巧和规则 | 百家乐赌博怎么玩| 百家乐官网波音平台导航网| 456棋牌官网| 百家乐厅| 自贡百家乐官网赌场娱乐网规则| 三亚市| 全讯网22335555| 百家乐二十一点游戏|