对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在运行时肯定都是要分配内存的.

 

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

 

对const和#define内存占用理解_第1张图片

 

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

 

你可能感兴趣的:(软件工程,C语言/C++)