在被堆栈对齐问题困扰之后,我开始想知道堆是否也应该对齐到 8 个八位字节的边界。
ARM Cortex EABI 规定,对于所有对外部函数的调用,堆栈必须是 8 位对齐的。我找不到任何关于堆对齐是否有任何限制的信息。似乎有一些建议表明堆也应该按 8 对齐,但大多数公开可用的内存管理代码都将它按 4 对齐。
堆栈对齐要求不应与堆对齐有任何关系(只要遵守字边界),因为在堆和堆栈之间复制时不会保留对齐。另外,我想不出为什么编译器在指向 8 个八位字节宽的项目时应该限制为 8 个对齐的指针。
任何人都可以确认 4 字节对齐对于堆来说是足够的吗?