繁体   English   中英

为什么GCC会分配不使用的堆栈空间?

[英]Why does GCC allocate stack space that it does not use?

在许多函数中,函数序言sub $0x1c,%esp开头,随后通过add $0x1c,%esp删除。 该功能几乎可以像什么都不做一样简单。 但是,这个空间从未使用过,并且由于我需要完全控制我的函数堆栈而变得烦恼。 知道是什么原因造成的,如何删除? 我正在使用-O2 -Wall -c -m32 -fno-stack-protector -fno-defer-pop -fno-builtin -march=i386编译。

这将有助于查看更多代码,但这与堆栈对齐有关。 您可以在GCC中使用-mpreferred-stack-boundary解决这个问题。 我的机器上的默认值为4,因此所有内容都对齐为16个字节。 我非常有信心,这与堆栈保护无关。 要查看堆栈保护的情况,请使用-fno-stack-check和-fstack-check编译程序并比较结果。 您会看到类似

>   orl $0, -12300(%esp)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM