由内存对齐度不足引起的问题似乎经常是随机出现的,因为事情可以通过巧合正确对齐,直到你改变一些无关的东西。有没有一个编译器标志或其他方法可以把这些问题全部隐藏起来?我希望它能确保类型永远不会比它们必须的更对齐。例如,在x86上,地址为 char
的地址永远是奇数,而 "我 "的地址也是奇数。int
s将永远是≡4 (mod 8)。(很明显,这将会浪费内存,而且可能会使程序更慢,所以我不会在发行版中启用它。)
编辑:为了澄清,这应该只影响数组的起始地址和 struct
的,而不是它们的内部布局(后者会破坏基本所有东西的兼容性,这是我绝对不希望看到的)。