-->

我有一个记忆inconcistency? 苹果系统(Do I have a memory inc

2019-10-19 02:38发布

我目前使用活动监视器,然而,这产生了严重的矛盾。 我有一个正在运行的程序,建立并存储在双精度60×100000阵列的10个维矢量GSL,并且另一个6×60阵列的16807个维GSL向量。

我在编写C ++,我使用的GSL库进出方便了分钟。

GSL载体基本上是双精度数据和指针的数组,所以我认为它应该是准确测量在刚刚双精度组件方面的使用。

现在,通过我的计算,我应该围绕存储500 MB的数据(每双8个字节)。 然而,我的MacOS活动监控告诉我,我存储“真正的”内存1.4 GB。 现在,这可能是衡量内存使用一个非常不准确的方法,但它在预测时,我的机器将使用RAM使用互换切换,并且变得很慢不准确! 当我增加第一数组的大小至60×40万,例如,用完了的存储器和一切都停止死。

因此,它是我的数学是错误的,或者是有什么与我的计算机估计它是多么的数据存储方式的问题呢?

编辑:或者是一些关于我存储指针的方式进行基于数据交代不清的分配器进入大规模过度补偿的存储需求?

编辑2:该数据被存储在stl::vector< stl::vector<gsl::gsl_vector * > >结构。 我读了征不使用动态内存分配:这可能导致在内存管理显着改善?

Answer 1:

您正在创建600000个std::vectors 。 这是一个很大的开销。 每个这些载体的不只是一个数组 - 有指针,尺寸,容量,比对等的开销另外,我怀疑你在堆上分配你的GSL载体?

艾根可以部分地解决你的问题,因为它具有矩阵类的静态专业化。 但是,你应该真正思考使用适当的3D contigous存储阵列/张的对象。



文章来源: Do I have a memory inconcistency? Macos