对const和#define内存占用理解

通过以下代码分析:

 

const int c = 5;
#define	N 6

void main()
{
	int i;
	int j;
	int k;
	int l;

	i = c;
	j = c;
	k = N;
	l = N;

	return 0;
}


 

 

汇编视图:

3:    const int c = 5;
4:    #define N 6
5:
6:    void main()
7:    {
0040D730   push        ebp
0040D731   mov         ebp,esp
0040D733   sub         esp,50h
0040D736   push        ebx
0040D737   push        esi
0040D738   push        edi
0040D739   lea         edi,[ebp-50h]
0040D73C   mov         ecx,14h
0040D741   mov         eax,0CCCCCCCCh
0040D746   rep stos    dword ptr [edi]
8:        int i;
9:        int j;
10:       int k;
11:       int l;
12:
13:       i = c;
0040D748   mov         eax,[_c (0042201c)]
0040D74D   mov         dword ptr [ebp-4],eax
14:       j = c;
0040D750   mov         ecx,dword ptr [_c (0042201c)]
0040D756   mov         dword ptr [ebp-8],ecx
15:       k = N;
0040D759   mov         dword ptr [ebp-0Ch],6
16:       l = N;
0040D760   mov         dword ptr [ebp-10h],6
17:
18:       return 0;
19:   }


可以看出,const是在内存中分配了一个地址,而#define仅仅是在编译时做了替换,没有在内存中分配.在最后生成的代码中,#define被保存为若干个立即数,占用的是ROM,

而const是在运行时占用了一个RAM空间. i, j, k, l在运行时肯定都是要分配内存的.

 

对于百度百科里面的解释不知道该如何理解:

 

 

应该是#define在代码区有若干份拷贝吧?

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值