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


红颜莎娜
浏览 789回答 2
2回答

守候你守候我

#define是预编译阶段直接展开的,如果是常量,当然直接变成立即数了。

元芳怎么了

const定义的变量才可能分配空间吧,上面的例子是因为编译器做了优化。如果是const int* a = &N;就会为N分配空间了。
打开App,查看更多内容
随时随地看视频慕课网APP