编译器未给局部变量分配栈空间?为何?

1个回答

写回答

小豚

2025-12-12 10:00

+ 关注

AI
AI

a和b为形参,并非局部变量。gcc有自身规则,进入Func函数时,rsp未变,仅帧指针rbp被修改。

而对于clang和msvc,会进行显式的空间分配。若传入的实参为变量,gcc会分配空间,不过分配的是局部变量空间,见下图第14行。但是,在call的时候会再次压入rip。进入Fun函数后,rbp - 4就不再是mAIn函数里的rbp - 4了,因为Fun函数开辟了新的空间,没有复用mAIn函数里x、y的空间。所以形参空间没有被分配就直接使用了,不过从mAIn函数来看,局部变量是有分配空间的。

但是,还有个但是。就下面这个例子,谁能给我讲讲,为啥两个参数跑到-20和-24的位置去了?这样的对齐好像不对呀。要是先安排局部变量再安排形参,不是应该从-16开始吗?

举报有用(0分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号