CSAPP解释说,SSE指令对16字节的数据块进行操作,它需要内存地址是16的倍数。
但是与堆栈框架有什么关系呢?这是否意味着SSE指令在堆栈帧上运行?如果是的话,常用的指令是什么?
发布于 2016-02-29 13:24:19
是的,堆栈帧的对齐是设置好的,因此任何指令都可以工作在任何数据类型上,这些数据类型可能存储在堆栈帧中。
例如,在x86/x86_64上有一些SSE指令,它们假设内存地址对齐为16个字节。然后,编译器假设堆栈帧对齐了16个字节,这样它就可以安排局部变量,如果需要的话,它们也可以对齐。SSE指令(和其他指令一样)可以对任何内存(包括全局内存、堆或堆栈)进行操作。
同样,当您分配结构超过16 (或等于)时,malloc/new必须返回16字节对齐地址,这样这样的指令才能与它一起工作。
https://stackoverflow.com/questions/35700491
复制相似问题