gpt4 book ai didi

c++ - std::aligned_storage 的分配目标(堆栈或堆?)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:02:59 25 4
gpt4 key购买 nike

我一直在努力了解称为 aligned_storage 的 TR1 添加项。在阅读以下文件的同时N2165 , N3190N2140我这辈子都看不到清楚描述所用内存的堆栈或堆性质的语句。

我看过 msvc2010、boost 和 gcc 提供的实现,它们都提供了一个以 union 使用为中心的基于堆栈的解决方案。

简而言之:

  • 是否定义了 aligned_storage 实现使用的内存类型(堆栈或堆),还是它总是基于堆栈?

  • 并且,定义/确定它的具体文件是什么?

注意:在 MSVC10 中,下面是 aligned_storage 类型的定义,在这种情况下,如果 aligned_storage 是一个自动变量,则在堆栈上创建 data(_Val,_Pad):

template<class _Ty, size_t _Len> 
union _Align_type
{
// union with size _Len bytes and alignment of _Ty
_Ty _Val;
char _Pad[_Len];
};

注意:这不是一个微不足道的问题。请在发布答案之前尝试理解问题。

最佳答案

std::aligned_storage<Len, Align>只是声明一个成员 typedef ( type )。

The member typedef type shall be a POD type suitable for use as uninitialized storage for any object whose size is at most Len and whose alignment is a divisor of Align

(这是来自最新的 C++0x 草案 N3225,20.7.6.6 表 53,但是 TR1 规范中的语言 N1836 实际上是相同的,除了在 C++0x 中的 Align 模板参数将最大对齐值作为其默认参数。)

std::aligned_storage本身不分配任何内存。您可以创建类型为 std::aligned_storage<Len, Align>::type 的对象并将该对象重新解释为满足上述要求的任何类型的对象。

关于c++ - std::aligned_storage 的分配目标(堆栈或堆?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4552504/

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