5 c++ storage tr1 alignment c++11
我一直试图让我的头围绕TR1添加,称为aligned_storage.在阅读以下文档N2165,N3190和N2140时,我不能在生命中看到一个语句,它清楚地描述了所使用的内存的堆栈或堆性质.
我已经看过msvc2010提供的实现,boost和gcc它们都提供了一个以联合使用为中心的基于堆栈的解决方案.
简而言之:
是否已定义aligned_storage实现使用的内存类型(堆栈或堆),还是始终基于堆栈?
什么是定义/确定的具体文件是什么?
注意:在MSVC10中,以下是aligned_storage类型的定义,在这种情况下,如果aligned_storage是自动变量,则在堆栈上创建数据(_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];
};
Run Code Online (Sandbox Code Playgroud)
注意:这不是一个小问题.在发布答案之前,请尝试理解问题.
Jam*_*lis 12
std::aligned_storage<Len, Align>只是声明一个成员typedef(type).
成员typedef
type应为POD类型,适合用作任何大小最大Len且对齐为除数的对象的未初始化存储.Align
(这是来自最新的C++ 0x草案,N3225,20.7.6.6表53,但TR1规范中的语言N1836实际上是相同的,除了在C++ 0x中Align模板参数的默认参数为最大对齐值.)
std::aligned_storage不会分配任何内存.您可以创建类型的对象,std::aligned_storage<Len, Align>::type并将该对象重新解释为满足上述要求的任何类型的对象.