在64位平台上分配的内存块的字节对齐是什么?

时间:2017-02-10 11:16:43

标签: c++ c malloc

我一直假设malloc返回一个已分配的内存块,其地址为16byte,使用Visual Studio和gcc对64bit系统进行对齐。但是,我一直在阅读有关这个​​问题的一些相互矛盾的文章。 MSDN网站对此非常清楚,但GNU文档更加“细致”。

任何澄清都会有所帮助。

这里有很好的答案:

Aligned memory management?

2 个答案:

答案 0 :(得分:1)

malloc返回一个带有基本对齐的指针(C11§7.22.3),这是max_align_t的对齐(C11 6.2.8)。这在操作系统之间有所不同,在Windows上,它对SSE来说还不够好。

various options,但如果是SSE,我认为好的方法是拨打_mm_malloc_mm_free。如果需要,可以使用宏将这些名称映射到适当的特定于平台的工具,例如_aligned_malloc

答案 1 :(得分:0)

保证对齐适合任何目的。这通常意味着8字节对齐。然而,随着新编译器的出现,它可能会发生变化。由于内存分配算法的工作方式,大分配也可能与页面边界对齐。