为什么推荐加const或constexpr修饰常量
摘要: 作者通过对比不使用和使用const/constexpr修饰常量的汇编代码,说明了前者会在内存中存储变量并进行赋值操作,导致内存占用和拷贝增加;而后者则将常量值直接嵌入到代码中,减少了内存和操作,提升效率,但会暴露常量值,安全性较低。 (评价: A)
用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修饰会让常量暴露出来(反汇编程序之后, 我们可以直接知道常量值是多少), 安全性较低.