我有以下代码:
#include <iostream>
using namespace std;
void f()
{
cout << "hello" << endl;
}
void f(int i)
{
cout << i << endl;
}
int main()
{
f();
f(0x123456);
}
我使用 编译它g++
,然后使用反汇编它objdump -Mintel -d
,我得到以下主要功能:
08048733 <main>:
8048733: 55 push ebp
8048734: 89 e5 mov ebp,esp
8048736: 83 e4 f0 and esp,0xfffffff0
8048739: 83 ec 10 sub esp,0x10
804873c: e8 9b ff ff ff call 80486dc <_Z1fv>
8048741: c7 04 24 56 34 12 00 mov DWORD PTR [esp],0x123456
8048748: e8 bb ff ff ff call 8048708 <_Z1fi>
804874d: b8 00 00 00 00 mov eax,0x0
8048752: c9 leave
8048753: c3 ret
现在,堆栈中的保留空间是 16 位(0x10,在第 8048739 行),而 int 是(在我的机器上)32 位。这不可能是因为优化,因为数字 0x123456 不适合 16 位。那么为什么编译器没有预留足够的空间呢?