CSAPP解释说,SSE指令对16字节数据块进行操作,并且需要存储器地址为16的倍数。
但是与堆栈框架的关系是什么?这是否意味着SSE指令在堆栈帧上运行?如果是这样,常用的说明是什么?
非常感谢。
答案 0 :(得分:2)
是的,堆栈帧的对齐已设置,因此任何指令都可以处理您可能存储在堆栈帧中的任何数据类型。
因此,例如在x86 / x86_64上有SSE指令,假设内存地址与16个字节对齐。然后编译器假设堆栈帧对齐16个字节,因此如果需要,它可以排列它们对齐的局部变量。 SSE指令(与任何其他指令一样)可以在任何内存上运行,包括全局,堆或堆栈。
它实际上与堆相同 - 当您分配超过16(或相等)的结构时,malloc / new必须返回16字节对齐的地址,以便该类指令可以使用它。