- 内存区域的划分:
32位OS
可以访问的虚拟内存空间
为0~4G
;- 一、内核空间:
3~4G
;- 二、用户空间
0~3G
;- 栈区:
局部变量
在栈区
分配、由OS
负责分配和回收 - 堆区:由程序员手动分配(
malloc函数
)和回收(free函数
); - 静态区:
.bss段
:未初始化
的全局变量或者使用static修饰
的未初始化
的全局变量或者局部变量;.data段
:初始化
的全局变量或者使用static修饰
的初始化
的全局变量或者局部变量;.rodata段
:顾名思义“read only
”,只读数据段,例如字符串常量
;.text段
:存放代码段;- 存储类型为const的变量注意事项:
const
可以修饰普通类型的变量
,也可以修饰指针类型的变量
,还可以用来修饰函数的形参
和返回值
;- 其
修饰的全局变量
存储在.rodata段
,不可以被修改
,通过指针
的方式也不可以被修改
,定义常量
时,必须在定义时进行初始化
; - 其
修饰的局部变量
在栈区
分配空间,不可以通过常量的变量名
本身进行修改,But
可以通过指针修改
使用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!!!]