gpt4 book ai didi

c++ - 我有内存不一致吗?苹果系统

转载 作者:太空宇宙 更新时间:2023-11-04 11:43:28 25 4
gpt4 key购买 nike

我目前使用事件监视器,但这会产生严重的不一致。我有一个正在运行的程序,它以 double 构建和存储一个 60 x 100,000 的 10 维 GSL vector 数组,以及另一个 6 x 60 的 16,807 维 GSL vector 数组。

我使用 C++ 编写代码,出于方便考虑,我正在使用 GSL 库。

GSL vector 本质上是一个 double 据数组和一个指针,因此我认为仅根据 double 组件来衡量它们的使用应该是准确的。

现在,根据我的计算,我应该存储大约 500 MB 的数据(每双 8 字节)。但是,我的 Macos 事件监视器告诉我我正在存储 1.4 GB 的“真实”内存。现在,这可能是一种非常不准确的内存使用测量方法,但它在预测我的机器何时从使用 RAM 切换到使用交换并变得非常慢时并不是不准确的!例如,当我将第一个数组大小增加到 60 x 400k 时,内存不足并且一切都停止了。

那么是我的数学有误,还是我的计算机估算其存储数据量的方式出了问题?

编辑:还是我存储基于指针的数据的方式让分配器感到困惑,导致大量过度补偿存储需求?

编辑 2:数据存储在 stl::vector< stl::vector<gsl::gsl_vector * > > 中结构。我读到 Eigen 不使用动态内存分配:这会导致内存管理方面的实质性改进吗?

最佳答案

您正在创建 600,000 个 std::vectors。这是很多开销。这些 vector 中的每一个都不仅仅是一个数组 - 存在指针、大小、容量、对齐等方面的开销。另外,我怀疑您在堆上分配了 GSL vector ?

Eigen 可能会部分解决您的问题,因为它具有 Matrix 类的静态特化。但是,您应该真正考虑使用适当的 3d 连续存储阵列/张量对象。

关于c++ - 我有内存不一致吗?苹果系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20537195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com