stackoverflow 的提问参考这里
从查阅到的资料中看出,在 x86-64 机器上,gcc 的 new operator 应该是只有 16 byte 对齐的,直到 gcc7 的 c++17 下,由于引入了 aligned new ,才支持更大的对齐 size.
但是我实际发现,gcc5 下得到的地址就已经是 32 byte 对齐了。 测试代码在这里: gcc4.9, gcc5.1
代码跑了上万次,每一次 gcc5 下得到的结果都是 32 byte 对齐,感觉不像是巧合
然后参考了这个帖子, 猜测是 glibc 或者 libstdc++中有相关的更改。
发现 gcc4.9 和 gcc5.1 的 glibc 版本都是 2.19 libstdc++的版本倒是不同,一个是 6.0.20 ,一个是 6.0.21
但是去看了 libstdc++的代码,没有发现和 Gcc5 有关的变更
所以我的问题是,gcc5 下得到的地址有 32 byte 对齐是不是巧合? 是巧合的话,如何能复现出只有 16 byte 对齐的情况? 不是巧合的话, 为什么 gcc4.9 和 gcc5 的行为不一致?