我记得以前学 c++,学到 const 的时候,都建议使用 const 定义变量,而不是 define。
const int N = 10; // better
#define N 10 // bad
除了类型安全等原因,其中一个讲到的就是 define 定义的宏在展开后,相比 const 定义的,会有更多的内存分配,比如这篇文章:https://blog.csdn.net/love_ga...
然后我用 visual studio 2015汇编下,看到的都是,
#include<iostream>
#include <stdio.h>
using namespace std;
const int N = 1; // #define N 1 下汇编也是和下面一样的
int main()
{
010B16D0 push ebp
010B16D1 mov ebp,esp
010B16D3 sub esp,0D8h
010B16D9 push ebx
010B16DA push esi
010B16DB push edi
010B16DC lea edi,[ebp-0D8h]
010B16E2 mov ecx,36h
010B16E7 mov eax,0CCCCCCCCh
010B16EC rep stos dword ptr es:[edi]
int a = N;
010B16EE mov dword ptr [a],1
int b = N;
010B16F5 mov dword ptr [b],1
return 0;
010B16FC xor eax,eax
}
dword ptr [a],1
这句,逗号的后面使用的都是立即数 1。
我在 stack overflow 上查了下 define vs const
相关的帖子(比如 https://stackoverflow.com/que...),并没有提及define
会带来更多的内存分配。
那么,define 定义的宏在展开后,相比 const 定义的,会有更多的内存分配 这种说法是不是不对?
#define是预编译阶段直接展开的,如果是常量,当然直接变成立即数了。
const定义的变量才可能分配空间吧,上面的例子是因为编译器做了优化。如果是
const int* a = &N;
就会为N分配空间了。