19、 define和 const 区别(编译阶段、安全性、内存占⽤等)

对于 define来说, 宏定义实际上是在预编译阶段进⾏处理,没有类型,也就没有类型检查,仅仅做的是遇到宏定义进⾏字符串的展开,遇到多少次就展开多少次,而且这个简单的展开过 程中,很容易出现边界效应,达不到预期的效果。因为 define 宏定义仅仅是展开,因此运⾏时系统并不为宏定义分配内存,但是从汇编 的⻆度来讲,define 却以⽴即数的⽅式保留了多份数据的拷贝。

对于 const 来说,const 是在编译期间进⾏处理的,const 有类型,也有类型检查,程序运⾏ 时系统会为 const 常量分配内存且从汇编角度讲,const 常量在出现的地方保留的是真正数据的内存地址,只保留了⼀份数据的拷⻉,省去了不必要的内存空间。⽽且,有时编译器不会为普通的 const 常量分配内存,是直接将 const 常量添加到符号表中,省去了读取和写⼊内存的操作,效率更⾼。

Last updated