通过以下代码分析:
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在代码区有若干份拷贝吧?