- 內(nèi)存區(qū)域的劃分:
32位OS
可以訪問(wèn)的虛擬內(nèi)存空間
為0~4G
;- 一、內(nèi)核空間:
3~4G
;- 二、用戶空間
0~3G
;- 棧區(qū):
局部變量
在棧區(qū)
分配、由OS
負(fù)責(zé)分配和回收 - 堆區(qū):由程序員手動(dòng)分配(
malloc函數(shù)
)和回收(free函數(shù)
); - 靜態(tài)區(qū):
.bss段
:未初始化
的全局變量或者使用static修飾
的未初始化
的全局變量或者局部變量;.data段
:初始化
的全局變量或者使用static修飾
的初始化
的全局變量或者局部變量;.rodata段
:顧名思義“read only
”,只讀數(shù)據(jù)段,例如字符串常量
;.text段
:存放代碼段;- 存儲(chǔ)類(lèi)型為const的變量注意事項(xiàng):
const
可以修飾普通類(lèi)型的變量
,也可以修飾指針類(lèi)型的變量
,還可以用來(lái)修飾函數(shù)的形參
和返回值
;- 其
修飾的全局變量
存儲(chǔ)在.rodata段
,不可以被修改
,通過(guò)指針
的方式也不可以被修改
,定義常量
時(shí),必須在定義時(shí)進(jìn)行初始化
; - 其
修飾的局部變量
在棧區(qū)
分配空間,不可以通過(guò)常量的變量名
本身進(jìn)行修改,But
可以通過(guò)指針修改
使用const修飾
的局部變量
; - 示例代碼:
#include <stdio.h>#include <stdlib.h>#include <string.h>int a; int b = 999; const int c = 666; static int d; static int e = 555; char a1[128]; char a2[128] = "I Love China!!!"; char *p; char *q = "I LIKE U!!!"; void var_init(){int a; int b = 999; const int c = 666; printf("c = [%d]\n",c);int *m = &c;*m = 99;printf("*m = [%d]\n",*m);printf("c = [%d]\n",c);static int d; static int e = 555; char a1[128]; char a2[128] = "I Love China!!!"; char *p; char *q = "I LIKE U!!!"; printf("a= [%d]\n",a);printf("b= [%d]\n",b);printf("d= [%d]\n",d);printf("e= [%d]\n",e);printf("a1[0] = [%d]\n",a1[0]);printf("a2 = [%s]\n",a2);printf("p = [%p]\n",p);puts("----------------------------------------------------------");p = (char *)malloc(sizeof(char)); printf("*p = [%d]\n",*p);printf("p = [%p]\n",p);puts("----------------------------------------------------------");free(p);p = NULL;printf("p = [%p]\n",p);puts("----------------------------------------------------------");printf("q = [%s]\n",q);}int main(int argc, char const *argv[]){printf("a= [%d]\n",a);printf("b= [%d]\n",b);printf("c= [%d]\n",c);printf("d= [%d]\n",d);printf("e= [%d]\n",e);printf("a1[0] = [%d]\n",a1[0]);printf("a2 = [%s]\n",a2);printf("p = [%p]\n",p);p = (char *)malloc(sizeof(char)); printf("*p = [%d]\n",*p);free(p);p = NULL;printf("p = [%p]\n",p);printf("q = [%s]\n",q);puts("************************************************************");var_init();return 0;}
a= [0]b= [999]c= [666]d= [0]e= [555]a1[0] = [0]a2 = [I Love China!!!]p = [(nil)]*p = [0]p = [(nil)]q = [I LIKE U!!!]************************************************************c = [666]*m = [99]c = [99]a= [0]b= [999]d= [0]e= [555]a1[0] = [-128]a2 = [I Love China!!!]p = [0xe37732c0bf8d7700]----------------------------------------------------------*p = [0]p = [0x564b6b388670]----------------------------------------------------------p = [(nil)]----------------------------------------------------------q = [I LIKE U!!!]