我试图根据 godbolt.org 上 c++ 中的平方函数来理解这一点。显然,返回、参数和局部变量使用 \xe2\x80\x9crbp -alignment\xe2\x80\x9d 来实现此函数。\n有人可以解释一下这是如何实现的吗?\n在这种情况下 rbp +alignment 会做什么?
\nint square(int num){\n int n = 5;// just to test how locals are treated with frame pointer\n return num * num;\n}\nRun Code Online (Sandbox Code Playgroud)\n编译器(x86-64 gcc 11.1)
\n生成的程序集:
\nsquare(int):\n push rbp\n mov rbp, rsp \n mov DWORD PTR [rbp-20], edi. ;\\\\Both param and local var use rbp-*\n mov DWORD PTR[rbp-4], 5. ;//\n mov eax, DWORD PTR [rbp-20]\n imul eax, eax\n pop rbp\n ret\n\nRun Code Online (Sandbox Code Playgroud)\n