首页 > 解决方案 > 使用 gcc6.2.0 & gcc8.3.0 编译将获得局部变量的差异对齐

问题描述

#include <iostream>
struct foo {
  char c[12];
};

int main()
{
  foo fa;
  foo fb;
  std::cout << &fa << "\n";
  std::cout << &fb << "\n";
}

使用GCC 6.2,输出:0x7fff67cd1ff0 0x7fff67cd1fe0 相差16字节

使用GCC 8.3,输出:0x7ffc5fe3cf14 0x7ffc5fe3cf08 相差12个字节

似乎 gcc6.2.0 与 gcc8.3.0 具有不同的默认堆栈对齐方式。而且我也试过-mpreferred-stack-boundary=4,但是好像不行。

我想消除 gcc6.2.0 和 gcc8.3.0 之间的区别,谁能告诉我,如果某些选项可以禁用它,谢谢。

标签: c++gcc

解决方案


推荐阅读