为什么推荐加const或constexpr修饰常量
用const/constexpr修饰常量可以减少内存占用和拷贝操作.
这是我们在很多书上可以看到的结论, 但是为什么用const/constexpr修饰常量可以减少内存占用和拷贝操作呢?
测试
不使用const/constexpr修饰
我们先来看一个反例, 不使用const/constexpr修饰常量:
|
|
我们可以得到汇编代码:
|
|
上面的汇编代码是int get_num = num;
这一句, num
被放在内存中, 先给寄存器eax
, eax
再将值赋给get_num
.
在这里, 我们消耗了sizeof(int)的内存空间, 多了一个赋值操作.
使用const/constexpr修饰
|
|
int get_num = num;
汇编后:
|
|
将num
的值直接赋值给get_num
, 没有额外的内存占用, 没有额外的赋值操作.
但是, 使用const/constexpr修饰会让常量暴露出来(反汇编程序之后, 我们可以直接知道常量值是多少), 安全性较低.