c/c++数据对齐问题

c/c++ 如何在栈上保证数据对齐:

#include <iostream>

struct __attribute__((aligned(16))) X
{};
 
int main() {
X x{};
std::cout<<((long long)&x)%16;
}
汇编代码X86-64(仅开头部分):
main:
push rbp
mov rbp, rsp
sub rsp, 16
可以看到并没有做什么特别操作,仅仅准备了16byte的栈。但是如果初始栈地址不是16byte对齐的,那不就错误了?
检索发现,X86-64默认栈对齐为16byte,如果对齐要求大于16byte会怎么样:
#include <iostream>
struct __attribute__((aligned(32))) X
{};

int main() {
X x{};
std::cout<<((long long)&x)%32;
}
汇编代码X86-64(仅开头部分):
main:
push rbp
mov rbp, rsp
and rsp, -32
sub rsp, 32
解决方法是先将栈对齐,然后再分配空间。


posted @   nanlour  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示