【发布时间】:2013-12-12 07:13:25
【问题描述】:
我目前使用活动监视器,但这会产生严重的不一致。我有一个正在运行的程序,它以双精度构建和存储一个 60 x 100,000 的 10 维 GSL 向量数组,以及另一个 16,807 维 GSL 向量的 6 x 60 数组。
我使用 C++ 编写代码,出于方便,我使用 GSL 库。
GSL 向量本质上是一个双精度数据数组和一个指针,因此我认为仅根据双精度分量来衡量它们的使用情况应该是准确的。
现在,根据我的计算,我应该存储大约 500 MB 的数据(每双 8 字节)。但是,我的 Macos 活动监视器告诉我,我正在存储 1.4 GB 的“真实”内存。现在,这可能是一种非常不准确的测量内存使用情况的方法,但它在预测我的机器何时从使用 RAM 切换到使用交换并且变得非常慢时并不是不准确的!例如,当我将第一个数组大小增加到 60 x 400k 时,我的内存不足,一切都停止了。
是我的数学有问题,还是我的计算机估计它存储的数据量的方式有问题?
编辑:或者是因为我存储基于指针的数据的方式使分配器混淆到大量过度补偿存储需求?
编辑 2:数据存储在 stl::vector< stl::vector<gsl::gsl_vector * > > 结构中。我读到 Eigen 不使用动态内存分配:这会导致内存管理的实质性改进吗?
【问题讨论】:
-
没有看到你的数据结构,很难说。我认为你的数学对原始双打或多或少是正确的。但是,根据您是针对 32 位还是 64 位进行编译,指针各有 4 个或 8 个字节。
-
好的,我会添加结构:)
标签: c++ memory-management vector gsl