|
|
发表于 2006-11-16 16:37:00
|
显示全部楼层
Re:程序面试试题(节选)
#define c 100
void main()
{
int x = c * 100;
int y = c * 50;
}
这是它的反汇编码:
004105B0 push ebp
004105B1 mov ebp,esp
004105B3 sub esp,48h
004105B6 push ebx
004105B7 push esi
004105B8 push edi
004105B0 push ebp
004105B1 mov ebp,esp
004105B3 sub esp,48h
004105B6 push ebx
004105B7 push esi
004105B8 push edi
004105B9 lea edi,[ebp-48h]
004105BC mov ecx,12h
004105C1 mov eax,0CCCCCCCCh
004105C6 rep stos dword ptr [edi]
004105C8 mov dword ptr [ebp-4],2710h
004105CF mov dword ptr [ebp-8],1388h
004105D6 xor eax,eax
004105D8 pop edi
004105D9 pop esi
004105DA pop ebx
004105DB mov esp,ebp
004105DD pop ebp
004105DE ret
我很想请教一下, 为调用c而产生的存储空间在哪? 堆上?栈上? 哪呢?呵呵
int x = c * 100;
int y = c * 50; 这两条语句变成的就是这两条指令
仔细看看
004105C8 mov dword ptr [ebp-4],2710h
004105CF mov dword ptr [ebp-8],1388h
你也知道要人家虚心,怎么不知道自己也虚心点
老大你看书超级不求甚解.我也不知道是不是翻译者的水平有问题. 老实跟你说,那句话的意思根本就不是你理解的那样.你不如随便找个c++论坛问问.
我不多说了,如果你是某公司的招聘者,考官,改卷官,这样的求知态度很容易误人子弟.我也没必要说服你, 假如你继续做这行, 肯定会继续进步,将来的某一天你自然会明白事实的真相是怎样的.
|
|