gpt4 book ai didi

c++ - std::aligned_storage 如何为任何对象公开正确对齐的存储?

转载 作者:行者123 更新时间:2023-11-30 03:28:37 24 4
gpt4 key购买 nike

std::aligned_storage结构提供了一个 type typedef 至少根据 cppreference :

Provides the member typedef type, which is a PODType suitable for use as uninitialized storage for any object whose size is at most Len and whose alignment requirement is a divisor of Align.

The default value of Align is the most stringent (the largest) alignment requirement for any object whose size is at most Len.

特别是默认值 Align ,适用于大小不超过 Len 的任何对象

请注意,对于过度对齐的类型没有警告或异常(exception)(无论如何,我使用的平台 gcc 至少支持一些过度对齐的类型)。

这样的实现如何实际工作?为了满足“任何对象”的要求,它似乎要么:

  1. 在平台上 alignof(T) <= sizeof(T)对于类型 T , 需要始终大致对齐 Len字节,因为大小为 Len 的对象最多可以对齐 Len .当然,对于大 Len 这会浪费大量内存。 !
  2. 在平台上 alignof(T)可能大于 sizeof(T) ,我根本看不出它是如何实现的。但是,它不是 clear to me这样的类型甚至可以存在。

基于 my testing , 默认 Align值,gcc不管 len 是什么,总是简单地对齐到 16。这意味着存储适合任何对象,而只适合基本对齐的对象(在该平台上为 alignof(max_align_t) == 16)。

最佳答案

根据 [meta.trans.other]/2 ,

It is implementation-defined whether any extended alignment is supported.

当他们在没有指针的大表之后指定这样的东西时,这非常烦人。我刚刚将这句话添加到 cppreference。

关于c++ - std::aligned_storage 如何为任何对象公开正确对齐的存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46457386/

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