gpt4 book ai didi

c++ - 等价于 C 中的 std::aligned_storage<>?

转载 作者:可可西里 更新时间:2023-11-01 17:39:02 26 4
gpt4 key购买 nike

在 C 语言中,有没有一种方法可以使堆栈上的存储过度对齐(即比从类型系统推断出的对齐更多)?

对于动态分配的内存中的变量,如果所有其他方法都失败了,我们总是可以手动对齐,但是对于自动分配的内存中的变量可以做什么呢?

我想可以使用 char[size + alignment - 1] 然后总是使用位操作来访问变量,但这似乎比必要的“有点”暗淡(har har har ; )).

最佳答案

在 C2011 中,有 _Alignas _Alignof 关键字,标题 <stdalign.h>这使得它们的使用稍微不那么难看,类型 max_align_t (在 <stddef.h> 中)。例如,你可以写

double _Alignas(4*_Alignof(double)) dvector[16];

请求一个包含 16 double 的数组数量对齐到 double 通常对齐的 4 倍,对于与特定于 CPU 的 vector 指令一起使用可能是必需的。这不能保证适用于所有实现,但如果它不起作用,则保证是编译时错误。

在 C2011 之前,没有标准方法来做到这一点,但许多编译器确实有具有类似功能的扩展,例如GCC 的 __attribute__ (aligned) 构造。

关于c++ - 等价于 C 中的 std::aligned_storage<>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33654845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com