一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

Q4MP_gh_c472c21 ? 2018-02-24 13:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

局部變量,局部靜態(tài)變量,全局變量,全局靜態(tài)變量區(qū)別:

局部變量: 棧區(qū)

局部靜態(tài)變量:靜態(tài)區(qū)

全局變量: 靜態(tài)區(qū)的常量區(qū)

全局靜態(tài)變量:靜態(tài)區(qū)

在進行C/C++編程時,需要程序員對內(nèi)存的了解比較精準(zhǔn)。經(jīng)常需要操作的內(nèi)存可分為以下幾個類別:

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

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

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

4、文字常量區(qū) —常量字符串就是放在這里的。 程序結(jié)束后由系統(tǒng)釋放

5、程序代碼區(qū)—存放函數(shù)體的二進制代碼。

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

這是一個前輩寫的,非常詳細(xì)

int a = 0; 全局初始化區(qū)

char *p1; 全局未初始化區(qū)

main()

{

int b; 棧

char s[] = "abc"; 棧

char *p2; 棧

char *p3 = "123456"; 123456在常量區(qū),p3在棧上。

static int c =0; 全局(靜態(tài))初始化區(qū)

p1 = (char *)malloc(10);

p2 = (char *)malloc(20);

分配得來得10和20字節(jié)的區(qū)域就在堆區(qū)。

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

}

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

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

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

3.所有函數(shù)體外定義的是全局變量,加了static后的變量不管是在函數(shù)內(nèi)部或外部都放在全局區(qū)。

4.使用const定義的變量將放于程序的只讀數(shù)據(jù)區(qū)。

三:程序中段的使用

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

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

例:const char ro[ ] = {"this is read only data"}; //只讀數(shù)據(jù)區(qū)

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

char BSS_1[ 100];//未初始化數(shù)據(jù)段

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

int main()

{

short b;//在棧上,占用2個字節(jié)

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

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

//“abcdefg”本身放置在只讀數(shù)據(jù)存儲區(qū),占8個字節(jié)

char *p1;//p1在棧上,占用4個字節(jié)

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

//“123456”在中讀數(shù)據(jù)區(qū)

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

static char BSS_2[100];//局部未初始化數(shù)據(jù)段

static int c = 0;//全局(靜態(tài))初始化區(qū)

p1=(char *)malloc(10 * sizeof(char ) );//分配內(nèi)存區(qū)域在堆區(qū)

strcpy(p1,"xxxx");//“XXXX”放在只讀數(shù)據(jù)區(qū),占5個字節(jié)

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

return 0;

}

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

    關(guān)注

    5152

    文章

    19675

    瀏覽量

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

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141783

原文標(biāo)題:年過完了,加油學(xué)習(xí)工作吧!你知道嵌入式c中各變量存儲位置嗎?

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

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

    嵌入式開發(fā),是如何理解嵌入式C編程的?

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

    知道嵌入式是什么嗎?

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

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

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

    是如何理解嵌入式C編程

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

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

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

    嵌入式參數(shù)的存儲處理

    嵌入式參數(shù)的存儲是怎么處理的?
    發(fā)表于 03-30 08:29

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

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

    STM32 內(nèi)存分配解析及變量存儲位置

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

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

    局部變量,局部靜態(tài)變量,全局變量,全局靜態(tài)變量區(qū)別:局部變量: 棧區(qū)局部靜態(tài)變量:靜態(tài)區(qū)全局
    發(fā)表于 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存儲位置

    局部變量,局部靜態(tài)變量,全局變量,全局靜態(tài)變量區(qū)別:局部變量: 棧區(qū)局部靜態(tài)變量:靜態(tài)區(qū)全局
    發(fā)表于 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語言中堆和棧的區(qū)別

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

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

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

    如何開發(fā)與存儲位置無關(guān)的STM32應(yīng)用?

    如何開發(fā)與存儲位置無關(guān)的STM32應(yīng)用?
    的頭像 發(fā)表于 10-18 16:46 ?902次閱讀
    如何開發(fā)與<b class='flag-5'>存儲位置</b>無關(guān)的STM32應(yīng)用?