- 相關(guān)推薦
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í)際的例子來(lái)分析變量存儲(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是只讀的,不可修改,它的地址位于.rodata段;注意,像A這種const變量在定義時(shí)必須初始化。因?yàn)橹挥谐跏蓟瘯r(shí)才有機(jī)會(huì)給它一個(gè)值,一旦定義之后就不能再改寫(xiě)了,也就是不能再賦值了;
2.程序中的字符串字面值"Helloworld%d "分配在.rodata段的末尾,字符串字面值是只讀的,相當(dāng)于在全局作用域定義了一個(gè)const數(shù)組:
const char helloworld[] = {'H', 'e', 'l', 'l', 'o', ' ', 'w','o', 'r', 'l', 'd', ' ', '%', 'd', ' ', ' 主站蜘蛛池模板: 岫岩| 建平县| 肇东市| 抚州市| 久治县| 青岛市| 梓潼县| 黔西| 农安县| 慈利县| 建德市| 晋宁县| 南宫市| 通化市| 仙桃市| 晴隆县| 特克斯县| 嫩江县| 太仆寺旗| 绍兴市| 分宜县| 武平县| 疏附县| 阜新| 金塔县| 湟中县| 剑川县| 布拖县| 通江县| 北海市| 盐边县| 阆中市| 丽水市| 闻喜县| 涿州市| 青铜峡市| 轮台县| 罗田县| 泰宁县| 万全县| 台南县|