STXXL的高内存使用率
High memory usage with STXXL
我正在使用STXXL进行一个项目,据我所知,STXXL是C++STL库的核心外版本。目前,我的程序运行得很好,但我现在面临的问题是,当程序运行时,它使用了接近2GB的内存(低到中等大小的数据集)。
在我的程序中,我使用了25个STXXL矢量,存储在磁盘上的各个文件中。至于我的.stxtl文件,我目前已将其设置为动态分配磁盘文件(通过将磁盘大小设置为0)。
所以,我的问题是:有没有一种方法可以明确地让STXXL使用硬盘而不是RAM?或者,在使用此库时,预计会有这样的内存使用量?
提前感谢任何人提供的任何建议。
bobb_the_builder关于stxxl:vector的RAM使用情况的说法是正确的。
请参阅以下代码:
#include <stxxl/vector>
int main()
{
// create vector
//stxxl::VECTOR_GENERATOR<int>::result vector[25];
stxxl::VECTOR_GENERATOR<int, 1, 1, 1*1024*1024>::result vector[25];
// fill vectors with integers
for (size_t i = 0; i < 100 * 1024 * 1024 * 1024llu; ++i) {
vector[i % 25].push_back(i);
}
return 0;
}
在Linux上,程序的常驻内存大小增长到27528 KiB(使用时)和当使用时为约1.6 GiB。
Windows管理器是否显示相同的内容?这可能只是Windows上的STXXL错误,还是只是任务管理器显示了不同的内存大小?
我猜您正在使用STXXL::VECTOR_GENERATOR
模板创建您在帖子中提到的25个stxxl::vector
?stxxl::vector
的内部内存使用情况通常取决于您的个人配置(即block_size * page_size * cache_pages
),如STXXL::VECTOR_GENERATOR上的STXXL文档所述。所有这些加起来就是保留的内部(=主)内存消耗。据我所知,STXXL试图根据这些模板参数,分配与容器使用的内存一样多的内部内存(如果可能的话)作为缓存。
注意:上述模板参数的默认值为:
page_size = 4
cache_pages = 8
block_size = 2 MiB
这导致总内存消耗25*(2 MiB*4*8)=1600 MiB,这解释了您报告的2 GB内存消耗的很大一部分。
(注意:STXXL向量中存储了哪些数据类型(ValueType)并不重要。)
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 从 C++11 代码中获取系统内存和 CPU 使用率
- 加载时间,遍历时间,不同数据段C/C 的内存使用率
- 使用 PID 获取内存和 CPU 使用率
- Linux:如何测量进程中线程的内存使用率
- 当CPU使用率高时,OpenCV会堆积内存吗
- Win32 C++中的DrawText会增加内存使用率
- Boost managed_mapped_file:设置允许的最大内存使用率
- 远程电脑的 CPU 使用率和内存状态
- STXXL的高内存使用率
- 内存使用率上升.释放的内存不会被重复使用
- Visual C++矢量擦除增加了内存使用率
- C、 所有平台中进程的C++CPU使用率和内存使用率+当前时间的可用网络下行链路带宽
- 具有低内存使用率的自平衡AVL树
- 内存池:对于大于缓存行大小的结构体,它们会提高缓存使用率吗?
- 在内存不增加的情况下逐渐提高cpu使用率.的想法