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 解决方法是先将栈对齐,然后再分配空间。
标签:__,cout,16byte,c++,对齐,main,数据 From: https://www.cnblogs.com/nanlour/p/18075165