转换size_t以允许std :: vector中的更多元素

D.C*_*tro 2 c++

我需要std::vector在32位中存储大量元素(更多是unsigned int允许的2 ^ 32-1).据我所知,这个数量受std::size_tunsigned int类型的限制.我可以std::size_t通过铸造来改变这个unsigned long吗?它能解决问题吗?

如果那是不可能的,假设我用64位编译.这会解决问题而不做任何修改吗?

Jan*_*dec 6

size_t是一种类型,可以保存任何可分配的内存块的大小.因此,您无法分配比适合您的内存更多的内存size_t,因此无法以任何方式存储更多元素.

以64位编译将允许它,但意识到阵列仍然需要适合内存.2 32是40亿,所以你要超过4*sizeof(元素)GiB的内存.超过8 GiB的RAM仍然很少,因此看起来不合理.

我建议用STXXL中的那个替换矢量.它使用外部存储,因此您的向量不受RAM的限制.该库声称可以轻松处理数TB的数据.

(编辑)迂腐:size_t需要保持最大单个对象的大小,不一定是所有可用内存的大小.在分段存储器模型中,当每个对象必须存在于单个段中时,它仅需要适应偏移,但是对于不同的段,可以访问更多的存储器.甚至可以在x86上使用它与PAE,"长"内存模型.但是我没有看到任何人真正使用它.