c語言變量存儲方式 c語言中變量的存儲類型精選

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

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

c語言變量存儲方式 c語言中變量的存儲類型篇一

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

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

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

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

4.堆:通常由程序員進行申請,最后進行釋放;

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

下面以實際的.例子來分析變量存儲空間:

#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變量在定義時必須初始化。因為只有初始化時才有機會給它一個值,一旦定義之后就不能再改寫了,也就是不能再賦值了;

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

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

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

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

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

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

修飾全局變量或者函數(shù)表示該變量或函數(shù)的作用域為該本文件內(nèi);

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

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

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

,extern關鍵字用于多個文件中聲明同一個標識符;

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

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

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

s("content_relate");

【c語言變量存儲布局】相關文章:

c語言變量定義

02-27

c語言變量理解

12-06

關于c語言變量理解

11-18

c語言變量的地址

12-08

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

11-16

c語言局部變量和全局變量

12-14

c語言中什么是變量

12-21

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

10-27

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

12-14

【本文地址:http://gzsthw.cn/zuowen/2700644.html】

全文閱讀已結(jié)束,如果需要下載本文請點擊

下載此文檔