首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么堆栈帧是16字节长的倍数?

为什么堆栈帧是16字节长的倍数?
EN

Stack Overflow用户
提问于 2016-02-29 13:12:18
回答 1查看 794关注 0票数 3

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-29 13:24:19

是的,堆栈帧的对齐是设置好的,因此任何指令都可以工作在任何数据类型上,这些数据类型可能存储在堆栈帧中。

例如,在x86/x86_64上有一些SSE指令,它们假设内存地址对齐为16个字节。然后,编译器假设堆栈帧对齐了16个字节,这样它就可以安排局部变量,如果需要的话,它们也可以对齐。SSE指令(和其他指令一样)可以对任何内存(包括全局内存、堆或堆栈)进行操作。

同样,当您分配结构超过16 (或等于)时,malloc/new必须返回16字节对齐地址,这样这样的指令才能与它一起工作。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35700491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档