c語(yǔ)言變量存儲(chǔ)方式 c語(yǔ)言中變量的存儲(chǔ)類型精選

格式:DOC 上傳日期:2023-04-24 08:31:20
c語(yǔ)言變量存儲(chǔ)方式 c語(yǔ)言中變量的存儲(chǔ)類型精選
時(shí)間:2023-04-24 08:31:20     小編:zdfb

每個(gè)人都曾試圖在平淡的學(xué)習(xí)、工作和生活中寫一篇文章。寫作是培養(yǎng)人的觀察、聯(lián)想、想象、思維和記憶的重要手段。寫范文的時(shí)候需要注意什么呢?有哪些格式需要注意呢?下面是小編為大家收集的優(yōu)秀范文,供大家參考借鑒,希望可以幫助到有需要的朋友。

c語(yǔ)言變量存儲(chǔ)方式 c語(yǔ)言中變量的存儲(chǔ)類型篇一

c語(yǔ)言變量是怎么儲(chǔ)存的大家了解嗎?下面一起去了解一下c語(yǔ)言變量存儲(chǔ)布局是怎么樣的吧,希望對(duì)大家有幫助!

1.正文段(.text):機(jī)器指令部分,是只讀的,防止意外的修改;

2.初始化數(shù)據(jù)段(.data):保存程序中的全局變量且已被賦初值或在函數(shù)中被static修飾的且已被賦初值的變量;

3.未初始化數(shù)據(jù)段(.bss):保存程序中的全局變量且未被賦初值或在函數(shù)中被static修飾的且未被賦初值的變量,這些變量由內(nèi)核賦初值0;

4.堆:通常由程序員進(jìn)行申請(qǐng),最后進(jìn)行釋放;

5.棧:存放函數(shù)中的臨時(shí)變量,函數(shù)調(diào)用時(shí)給變量分配內(nèi)存,函數(shù)釋放時(shí)釋放內(nèi)存。

下面以實(shí)際的.例子來分析變量存儲(chǔ)空間:

#include

const int a = 10;

int a = 20;

static int b = 30;

int c;

int main(void)

{

static int a = 40;

char b[] = "forward";

register int c = 50;

printf("hello world %d ", c);

return 0;

}

1.全局變量a用const修飾,表示a是只讀的,不可修改,段;注意,像a這種const變量在定義時(shí)必須初始化。因?yàn)橹挥谐跏蓟瘯r(shí)才有機(jī)會(huì)給它一個(gè)值,一旦定義之后就不能再改寫了,也就是不能再賦值了;

2.程序中的字符串字面值"helloworld%d "段的末尾,字符串字面值是只讀的,相當(dāng)于在全局作用域定義了一個(gè)const數(shù)組:

const char helloworld[] = {'h', 'e', 'l', 'l', 'o', ' ', 'w','o', 'r', 'l', 'd', ' ', '%', 'd', ' ', ''};

程序加載運(yùn)行時(shí),.段通常合并到一個(gè)segment中,操作系統(tǒng)將這個(gè)segment的頁(yè)面只讀保護(hù)起來,防止意外的改寫;

3.全局變量a,b及函數(shù)中用static修飾的變量a;段中;都是初始化了得數(shù)據(jù);

4.全局變量c未被初始化,段;由exec初始化為0,所以為初始化的全局變量默認(rèn)值為0,函數(shù)內(nèi)的static變量若沒有被初始化,也位域該段,默認(rèn)值為0;.在加載時(shí)合并到一個(gè)segment中;

5.函數(shù)中的字符數(shù)組b,分配在棧中,函數(shù)中變量c并沒有在棧上分配存儲(chǔ)空間,而是直接存在eax寄存器里,后面調(diào)用printf也是直接從eax寄存器里取出c的值當(dāng)參數(shù)壓棧,這就是register關(guān)鍵字的作用,指示編譯器盡可能分配一個(gè)寄存器來存儲(chǔ)這個(gè)變量。

修飾全局變量或者函數(shù)表示該變量或函數(shù)的作用域?yàn)樵摫疚募?nèi);

修飾局部變量,該變量作用域仍然是函數(shù)內(nèi),但是它并不是在調(diào)用函數(shù)時(shí)分配,在函數(shù)返回時(shí)釋放,而是像全局變量一樣靜態(tài)分配,只初始化一次;

,用它修飾的變量在函數(shù)調(diào)用時(shí)自動(dòng)在棧上分配存儲(chǔ)空間,函數(shù)返回時(shí)自動(dòng)釋放,例如上例中main函數(shù)里的b其實(shí)就是用auto修飾的,只不過auto可以省略不寫,auto不能修飾文件作用域的變量;

er,編譯器對(duì)于用register修飾的變量會(huì)盡可能分配一個(gè)專門的寄存器來存儲(chǔ),但如果實(shí)在分配不開寄存器,編譯器就把它當(dāng)auto變量處理了,register不能修飾文件作用域的變量(全局變量)。

,extern關(guān)鍵字用于多個(gè)文件中聲明同一個(gè)標(biāo)識(shí)符;

1.靜態(tài)生存期,具有外部或內(nèi)部鏈接屬性,或者被static修飾的變量,在程序開始執(zhí)行時(shí)分配和初始化一次,此后便一直存在直到程序結(jié)束。,.段(靜態(tài)區(qū)域),例如上例中main函數(shù)外的a,a,b,c,以及main函數(shù)里的a。

2.自動(dòng)生存期,鏈接屬性為無鏈接并且沒有被static修飾的變量,這種變量在進(jìn)入塊作用域時(shí)在棧上或寄存器中分配,在退出塊作用域時(shí)釋放。例如上例中main函數(shù)里的b和c。

3.動(dòng)態(tài)分配生存期,調(diào)用malloc函數(shù)在進(jìn)程的堆空間(動(dòng)態(tài)區(qū)域)中分配內(nèi)存,調(diào)用free函數(shù)可以釋放這種存儲(chǔ)空間。

s("content_relate");

【c語(yǔ)言變量存儲(chǔ)布局】相關(guān)文章:

c語(yǔ)言變量定義

02-27

c語(yǔ)言變量理解

12-06

關(guān)于c語(yǔ)言變量理解

11-18

c語(yǔ)言變量的地址

12-08

c語(yǔ)言順序存儲(chǔ)結(jié)構(gòu)

11-16

c語(yǔ)言局部變量和全局變量

12-14

c語(yǔ)言中什么是變量

12-21

c語(yǔ)言變量的命名規(guī)則

10-27

c語(yǔ)言程序的存儲(chǔ)區(qū)域

12-14

【本文地址:http://mlvmservice.com/zuowen/2700644.html】

全文閱讀已結(jié)束,如果需要下載本文請(qǐng)點(diǎn)擊

下載此文檔