【发布时间】:2015-03-12 01:26:56
【问题描述】:
上下文是:一个人想要得到一个相当好的内存,例如。允许编译器使用 AVX, AVX2 。同时,人们试图尽可能合理地保持代码的可移植性。使用aligned_alloc 分配听起来不错,但C11 将此列为未定义行为:
“aligned_alloc函数请求的对齐方式无效或实现不支持,或者请求的大小不是对齐方式的整数倍”
因此,例如使用 aligned_alloc(32, 128) 可以经常得到很好的结果,但有一天,它可以是其他编译器中的 UB。
在这种情况下,不那么严格的对齐就足够了,这会产生较慢但正确的代码。因此,在这种情况下,一些理想的方法会要求最严格的对齐,最多可达 128。有没有办法实现这样的目标?
-- 问题主要是关于使用aligned_alloc,而不是创建自己的分配器。
==编辑==
已经在评论中回答了,是_Alignof (max_align_t)
thx chux,我忽略了那个!
【问题讨论】:
-
如果可移植性很重要,您可以通过分配 n+alignment-1 字节并自行调整指针来保证对齐。
-
查看
max_align_t:“这是一种对象类型,其对齐方式与所有上下文中的实现所支持的一样好;” -
我会留给其他人写一个详细的答案。 GTG
标签: c memory-alignment c11