STXXL的高内存使用率

High memory usage with STXXL

本文关键字:内存 使用率 高内存 STXXL      更新时间:2023-10-16

我正在使用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::vectorstxxl::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)并不重要。)