86可以推/弹出少于4个字节? [重复](x86 Can push/pop be less th

2019-08-20 02:29发布

这个问题已经在这里有一个答案:

  • 为什么不能将字节推到奔腾IA-32堆? 4个回答

嗨,我读通过弗吉尼亚大学x86上的指南,它指出,推动和出栈会删除或增加了一个4字节的数据元素堆栈。

这是为什么设置为4个字节? 可以这样改变,可以节省您的堆栈通过推动较小的数据元素上的内存?

该指南可以在这里找到,如果有人想查看: http://www.cs.virginia.edu/~evans/cs216/guides/x86.html

Answer 1:

简短的回答:是的,16位或32位。 而且,对于X86-64 64位。

用于堆的主要原因是从嵌套函数调用返回和保存/恢复寄存器的值。 它通常也用来传递参数和返回功能的结果。 除了最小的参数,这些物品通常具有由处理器,即,指令指针寄存器的大小的设计相同的尺寸。 对于8088/8086,它是16位。 为80386和接班人,它是32位。 因此,存在在具有其他尺寸操作栈的指令的小值。

还有内存总线上的数据大小的考虑。 这需要时间来检索或存储字,因为它做了字节相同的金额。 (除8088,其具有16位的寄存器中,但是一个8位数据总线。)对齐也发挥了作用。 堆栈应该在字边界对齐,以便每个值可以作为一个存储器操作来检索。 权衡通常采取节省时间在节省内存。 通过一个字节作为参数,一个字,通常使用。 (或者,取决于提供给编译器优化中,一个字大小的寄存器将被使用,完全避免堆栈。)



文章来源: x86 Can push/pop be less than 4 bytes? [duplicate]