xml*_*lmx 4 c++ standards containers iterator allocator
假设我有100G整数,并希望将它们插入到vector<int>32位机器上,是否可能?
如果我使用自定义allocator来管理存储策略,那么如何保证以下操作始终有效:
vector<int> coll;
coll.insert(100G integers);
memcpy(coll.begin() + (1024 * 1024 * 1024 * 8), "Hello", 5);
Run Code Online (Sandbox Code Playgroud)
请注意,C++标准要求存储在a中的对象vector必须是连续的.coll.begin() + (1024 * 1024 * 1024 * 8)可能是硬盘的地址.
您不能使用本机指针直接处理100 G的整数,因为它们将消耗400 GB的内存; 某些32位操作系统最多可以处理2,3或4 GB的RAM,大多数情况下使用PAE可以达到64 GB.但是,任何32位程序都将使用32位指针,只能处理高达4 GB的RAM.
所有标准STL实现(来自gcc的libstdc ++,来自llvm + clang的libcxx,来自russia的stlport,来自microsoft的microsoft stl ......)在STL集合中使用本机指针,并使用本机(32位)size_t作为集合大小.
您可以尝试非标准的STL实现,例如STXXL,http://stxxl.sourceforge.net/ (介绍幻灯片),它使用磁盘(HDD)作为存储重新实现一些STL集合.如果幸运的话,你可以在几天甚至几十小时内使用巨大的(至少需要400GB)快速SSD.
STXXL的主要功能包括:并行磁盘的透明支持.该库提供了基本并行磁盘算法的实现.STXXL是唯一支持并行磁盘的外部存储器算法库.该库能够处理非常大的问题(测试高达几十TB).
但是32位平台不支持现代版本的STXXL; 我不能说,任何旧版本都可以在具有如此庞大数据的32位平台上运行......它使用STL的某些部分,如果有任何size_t大小的参数,您的任务将失败......