【发布时间】:2012-04-09 16:24:22
【问题描述】:
boost::array 的 动态 变体是否在内部使用 C99 的可变长度数组 (VLA) (GCC) 和基于堆的 em> 不然呢?
【问题讨论】:
标签: c++ arrays memory-management boost containers
boost::array 的 动态 变体是否在内部使用 C99 的可变长度数组 (VLA) (GCC) 和基于堆的 em> 不然呢?
【问题讨论】:
标签: c++ arrays memory-management boost containers
boost::array 基于模板参数工作。模板参数不能是运行时值。所以没有。
此外,VLA 仅适用于在堆栈上声明的数组 (ObjType val[someInteger];)。它们不适用于声明为 within 对象的数组 (struct ObjType { int val[someInteger]; };。因此,即使模板参数可以是运行时值,它也无济于事。
如果您负担不起堆分配,只需将std::vector 与从预分配内存的“堆栈”中提取的分配器一起使用。
【讨论】:
std::allocator,它使用new和delete。 Boost 确实提供了一些分配器,包括一个池化内存分配器 (boost.org/doc/libs/1_49_0/libs/pool/doc/html/index.html),它可以满足您的需求。否则,您将不得不编写它。