1. const常量与宏定义常量标识符

(1) 编译器处理方式时间不同
     define宏是在预处理阶段展开;
     const常量是编译运行阶段使用;

(2) 类型和安全检查不同
     define宏没有类型,不做任何类型检查,仅仅是展开;
     const常量有具体的类型,在编译阶段会执行类型检查

(3) 存储方式不同
     define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存;
     const常量会在内存中分配(可以是堆中也可以是栈中);


补充:const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝,所以宏在程序运行过程中所消耗的内存要比const变量的大得多;

编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率比宏定义要高;

宏定义存储与代码段,更多的宏影响到镜像的大小;

2. const变量

  1. 总结,const全局变量存储在全局存储空间,其值只有可读属性,不能修改;
  2. const局部变量存储在堆栈中,可通过指针修改其值;
  3. const变量在预处理时处理,编译器只对其值读取一次(这也是为什么内存中的值实际被修改时,编译器print的值仍为原来的值)

https://blog.csdn.net/a3125504x/article/details/78835973

 

4. 内存划分

内存区化为四个部分,分别保存 代码段、全局(静态)变量区、栈、堆

 

 https://blog.csdn.net/MQ0522/article/details/114823770

 

 3. sizeof

  char ca[] = {"123456"};
  char *pca = "123456";
printf("sizeof(ca)=%d,sizeof(pca)=%d,sizeof(*pca)=%d\n",sizeof(ca),sizeof(pca),sizeof(*pca));
  
   char cb[3][6] = {"123456","123456","123456"};
   char *pcb[] = {"123456","123456","123456"};
printf("sizeof(cb)=%d,sizeof(pcb)=%d,sizeof(*pcb)=%d,sizeof(**pcb)=%d\n",sizeof(cb),sizeof(pcb),sizeof(*pcb),sizeof(**pcb)); 

//32位
$ gcc sz.c -o sz -m32
[nereus@nereusp cpp]$ ./sz
sizeof(ca)=7,sizeof(pca)=4,sizeof(*pca)=1
sizeof(cb)=18,sizeof(pcb)=12,sizeof(*pcb)=4,sizeof(**pcb)=1

//64位
$ gcc sz.c -o sz
$ ./sz
sizeof(ca)=7,sizeof(pca)=8,sizeof(*pca)=1
sizeof(cb)=18,sizeof(pcb)=24,sizeof(*pcb)=8,sizeof(**pcb)=1

sizeof(数组名)返回的是数组的大小

sizeof(ca)=7,注意此处包含一个结束符
sizeof(cb)=18,

sizeof(一维数组指针)返回的是数组单个元素指针的大小,即系统指针的长度,32位系统为4,64位系统位8

64位:sizeof(pca)=8,32位:sizeof(pca)=4

sizeof(*一维数组指针)返回的是数组单个元素对应类型的大小

sizeof(*pca)=1,char的大小

sizeof(二维数组指针)返回的是二维数组行指针的大小,32位系统为行数×4,64位系统位行数×8

sizeof(pcb)等同于sizeof(pcb[0])、sizeof(pcb[1])、sizeof(pcb[2])

64位:sizeof(pcb)=24,3行×8,注意二维数组每一行的结尾没有结束符'\0',所以是行长度为8

32位:sizeof(pcb)=12,3行×4,

sizeof(*二维数组指针)返回的是系统指针的长度,32位系统为4,64位系统位8

64位:sizeof(pcb)=8,32位:sizeof(pcb)=4

sizeof(**二维数组指针)返回的是数组单个元素指针的大小,即char的大小

sizeof(**pcb)=1,

 

https://blog.csdn.net/Namcodream521/article/details/85315955