我一直假设malloc返回一个已分配的内存块,其地址为16byte,使用Visual Studio和gcc对64bit系统进行对齐。但是,我一直在阅读有关这个问题的一些相互矛盾的文章。 MSDN网站对此非常清楚,但GNU文档更加“细致”。
任何澄清都会有所帮助。
这里有很好的答案:
答案 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字节对齐。然而,随着新编译器的出现,它可能会发生变化。由于内存分配算法的工作方式,大分配也可能与页面边界对齐。