为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
红颜莎娜 2019-03-20 08:35:03
我记得以前学 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 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

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

查看完整回答
反对 回复 2019-03-20
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

const定义的变量才可能分配空间吧,上面的例子是因为编译器做了优化。如果是const int* a = &N;就会为N分配空间了。

查看完整回答
反对 回复 2019-03-20
  • 2 回答
  • 0 关注
  • 788 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信