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 @ 2024-03-15 12:51  nanlour  阅读(26)  评论(0)    收藏  举报