【发布时间】:2017-06-27 17:30:25
【问题描述】:
如何使用 malloc(或 new,因为在大多数实现中,new 是用 malloc 实现的,不确定标准对对齐和 new 的规定是什么,除了数据必须与最高标量对齐对齐)与类型将对齐要求设置为高于系统上的最大对齐要求 (alignof(std::max_align_t))?所以像
alignas(alignof(std::max_align_t) + alignof(int)) struct Something {
...
};
【问题讨论】:
-
让
n表示所需的对齐方式(很遗憾,您在问题中没有提到这一点;本来可以更容易地回答它)。只需用n+sizeof(struct Something)调用malloc,然后从malloc返回的值开始搜索对齐的地址。保证您在[retVal,retVal+n-1]之间找到这样的有效地址。然后将其用作结构的基地址。 -
@barakmanos 这是一个聪明的黑客哈哈,没有图书馆解决方案吗?我猜 C 不必担心这一点,因为没有比最大标量要求更高的对齐要求
-
我相信任何厂商都必须提供适合所支持平台(编译器+底层硬件架构)的
malloc。 -
使用 C++11,您可以使用aligned_alloc。如果没有 C++11,在 Visual Studio 中您可以使用 _aligned_malloc(但它更多的是 C 而不是 C++)。
标签: c++ alignment malloc alignas