如何使用malloc(或者new,因为在大多数实现中,new是使用malloc实现的,不确定标准所说的关于对齐以及除数据之外的新内容必须与最高的标量对齐对齐)与类型对齐要求设置为高于系统上的最大对齐要求(alignof(std::max_align_t)
)?像
alignas(alignof(std::max_align_t) + alignof(int)) struct Something {
...
};
答案 0 :(得分:0)
将评论转化为答案。
让ALIGNMENT
表示所需的对齐方式。
然后您可以安全地分配您的结构,如下所示:
char* buffer = new char[ALIGNMENT+sizeof(Something)];
uintptr_t address = reinterpret_cast<uintptr_t>(buffer);
uintptr_t aligned_address = address+ALIGNMENT-address%ALIGNMENT;
Something* something = reinterpret_cast<Something*>(aligned_address);