【发布时间】:2011-10-31 02:36:25
【问题描述】:
在 std::list 中,函数 max_size() 中的最大尺寸是如何计算的?现在我意识到这取决于实现,但假设我是制作标准库的人。我将如何确定list 的特定类型T 的最大限制也是可移植的?
【问题讨论】:
-
不管怎样,GNU 实现将其定义为
_M_get_Node_allocator().max_size();,然后返回size_t(-1) / sizeof(_Tp);。 -
不管怎么计算,这个值基本上是一文不值……在达到这个理论极限之前系统会很好的报错。
-
这对于
std::allocator来说通常是无用的,它通常会尝试分配系统上可能可用的任何内存。特定的池分配器也存在,max_size将等于池大小。你绝对可以用完这样一个游泳池,这不仅仅是理论上的。