gpt4 book ai didi

c - 为什么 GCC 分配它不使用的堆栈空间?

转载 作者:太空宇宙 更新时间:2023-11-04 00:02:53 24 4
gpt4 key购买 nike

在许多函数中,函数序言以 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)

关于c - 为什么 GCC 分配它不使用的堆栈空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35819638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com