对比const定义的变量,define定义的宏真的会存在多次内存拷贝么?

我记得以前学 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 定义的,会有更多的内存分配 这种说法是不是不对?

阅读 2.9k
1 个回答

#define是预编译阶段直接展开的,如果是常量,当然直接变成立即数了。
const定义的变量才可能分配空间吧,上面的例子是因为编译器做了优化。如果是const int* a = &N;就会为N分配空间了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题