gpt4 book ai didi

c++ - alignas 说明符是否与 'new' 一起使用?

转载 作者:可可西里 更新时间:2023-11-01 14:56:56 25 4
gpt4 key购买 nike

我的问题很简单;

alignas 说明符是否与“new”一起使用?也就是说,如果定义了一个struct是对齐的,那么在分配new的时候会对齐吗?

最佳答案

在 C++17 之前,如果你的类型的对齐方式没有过度对齐,那么是的,默认的 new将工作。 “过度对齐”表示您在 alignas 中指定的对齐方式大于 alignof(std::max_align_t) .默认 new将或多或少地与非过度对齐的类型一起工作;默认内存分配器将始终分配对齐等于 alignof(std::max_align_t) 的内存.

但是,如果您的字体对齐过度,那您就不走运了。既不是默认的 new ,也不是任何全局new您编写的运算符甚至可以知道类型所需的对齐方式,更不用说为其分配适当的内存了。帮助这种情况的唯一方法是重载类的 operator new , 这将能够查询类与 alignof 的对齐情况.

当然,如果那个类被用作另一个类的成员,这将没有用。除非那个其他类也重载了 operator new .所以像 new pair<over_aligned, int>() 这样简单的东西行不通。

C++17 adds a number of memory allocators给出了正在使用的类型的对齐方式。这些分配器专门用于过度对齐的类型(或更具体地说,new-extended over-aligned types)。所以new pair<over_aligned, int>()将在 C++17 中工作。

当然,这仅在分配器处理过度对齐类型的情况下有效。

关于c++ - alignas 说明符是否与 'new' 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15511909/

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