gpt4 book ai didi

alignment - 为什么堆栈帧的长度是 16 字节的倍数?

转载 作者:行者123 更新时间:2023-12-05 02:21:16 25 4
gpt4 key购买 nike

CSAPP 解释说 SSE 指令对 16 字节的数据 block 进行操作,它需要内存地址是 16 的倍数。

但是和栈帧有什么关系呢?这是否意味着 SSE 指令在堆栈帧上运行?如果有,常用的指令是什么?

最佳答案

是的,堆栈帧的对齐方式已设置,因此任何指令都可以处理您可能存储在堆栈帧中的任何数据类型。

例如,在 x86/x86_64 上,有 SSE 指令假定内存地址对齐到 16 字节。然后编译器假定堆栈帧对齐 16 个字节,因此它可以根据需要安排它们也对齐的局部变量。 SSE 指令(与任何其他指令一样)可以对任何内存进行操作,包括全局、堆或堆栈。

实际上对于堆也是如此 - 当您分配长度超过 16(或等于)的结构时,malloc/new 必须返回 16 字节对齐的地址,以便这种指令可以使用它。

关于alignment - 为什么堆栈帧的长度是 16 字节的倍数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35700491/

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