【问题标题】:Variable Length Array C++ Wrapper Container可变长度数组 C++ 包装容器
【发布时间】:2012-04-09 16:24:22
【问题描述】:

boost::array动态 变体是否在内部使用 C99 的可变长度数组 (VLA) (GCC) 和基于堆的 em> 不然呢?

【问题讨论】:

    标签: c++ arrays memory-management boost containers


    【解决方案1】:

    boost::array 基于模板参数工作。模板参数不能是运行时值。所以没有。

    此外,VLA 仅适用于在堆栈上声明的数组 (ObjType val[someInteger];)。它们不适用于声明为 within 对象的数组 (struct ObjType { int val[someInteger]; };。因此,即使模板参数可以是运行时值,它也无济于事。

    如果您负担不起堆分配,只需将std::vector 与从预分配内存的“堆栈”中提取的分配器一起使用。

    【讨论】:

    • STL、Boost 或其他是否提供这种类似堆栈的分配器,还是我必须自己编写?
    • 我相信STL只提供std::allocator,它使用newdelete。 Boost 确实提供了一些分配器,包括一个池化内存分配器 (boost.org/doc/libs/1_49_0/libs/pool/doc/html/index.html),它可以满足您的需求。否则,您将不得不编写它。