27: const int NUM = 1;28: void main()29: {0040B7A0 push ebp0040B7A1 mov ebp,esp0040B7A3 sub esp,48h0040B7A6 push ebx0040B7A7 push esi0040B7A8 push edi0040B7A9 lea edi,[ebp-48h]0040B7AC mov ecx,12h0040B7B1 mov eax,0CCCCCCCCh0040B7B6 rep stos dword ptr [edi]30: int a = NUM;0040B7B8 mov dword ptr [ebp-4],131: int *p = (int *)&NUM;0040B7BF mov dword ptr [ebp-8],offset NUM (0042001c)32: (*p)++;0040B7C6 mov eax,dword ptr [ebp-8]0040B7C9 mov ecx,dword ptr [eax]0040B7CB add ecx,10040B7CE mov edx,dword ptr [ebp-8]0040B7D1 mov dword ptr [edx],ecx33:34: }以上是本人在Vc6.0環(huán)境上編譯的代碼,通過反匯編可以看到,const常量NUM是占用內(nèi)存的,但是地址并不是在棧內(nèi),而且使用常量的地方其實(shí)都直接使用的立即數(shù),另外(*P)++的地方會(huì)死掉,請(qǐng)教高手給與解答一二。因?yàn)槲覄傋?cè),所以沒有積分,請(qǐng)大俠不要介意補(bǔ)充:我的朋友在linux下也做同樣的事情確能編譯過,而且運(yùn)行也有結(jié)果const int num = 3;cout << &num << endl;int * p = (int*)#(*p)++;cout << (*p) << endl;cout << num << endl;結(jié)果0x7fbffff7ac43這又怎么理解?
添加回答
舉報(bào)
0/150
提交
取消