小编Ben*_* B.的帖子

向量c++向量的大小

我试图估计向量的向量在内存中的大小,但似乎我没有得到正确的近似值。

这是我编写的用于检查的小代码:

#include <vector>
#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
        size_t n = 100;
        size_t m = 1000000;

        float sizeInKB = (sizeof(vector<vector<int> >) + n*sizeof(vector<int>) + n*m*sizeof(int))/1024.0f;
        cout << sizeInKB << " KB" << endl;

        vector<vector<int> > vect(n);

        for(int i = 0; i < n; ++i)
        {
                vect[i].resize(m);
        }

        while(true)
        {}

        return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

作为输出,我得到 390 630 KB,而根据任务管理器,应用程序占用内存 394 588 KB。我同意这不是了解应用程序(尤其是向量)使用了多少内存的最佳方法,但它给出了一个很好的提示,4 MB 不仅仅是几 KB。

现在,如果我尝试估计向量的向量的向量在内存中的大小,它会变得越来越混乱。使用相同的代码,替换intvector<int>

#include <vector>
#include <iostream>
using namespace …
Run Code Online (Sandbox Code Playgroud)

c++ memory vector sizeof

5
推荐指数
1
解决办法
2881
查看次数

MATLAB:访问加载的MAT文件非常慢

我目前正在开发一个涉及保存/加载相当大的MAT文件(大约150 MB)的项目,我意识到访问加载的单元格数比在脚本或函数内创建的等效版本要慢得多.

我创建了这个例子来模拟我的代码并显示差异:

clear; clc;

disp('Test for computing with loading');

if exist('data.mat', 'file')
    delete('data.mat');
end

n_tests = 10000;
data = {};
for i=1:n_tests
    data{end+1} = rand(1, 4096);
end

% disp('Saving data');
% save('data.mat', 'data');
% clear('data');
% 
% disp('Loading data');
% load('data.mat', '-mat');

for i=1:n_tests
    tic;
    for j=1:n_tests
        d = sum((data{i} - data{j}) .^ 2);
    end
    time = toc;
    disp(['#' num2str(i) ' computed in ' num2str(time) ' s']);
end
Run Code Online (Sandbox Code Playgroud)

在此代码中,不保存或加载MAT文件.i上一次迭代的平均时间是0.75秒.当我取消注释保存/加载文件的行时,i上一次迭代的计算大约需要6.2秒(不考虑保存/加载时间).相差8倍!

我使用的是带有Windows 7 64位的64位MATLAB 7.12.0(R2011a),并且使用版本v7.3保存了MAT文件.

它可以与MAT文件的压缩相关吗?还是缓存变量?有没有办法防止/避免这种情况?

performance matlab-load

3
推荐指数
1
解决办法
2912
查看次数

标签 统计

c++ ×1

matlab-load ×1

memory ×1

performance ×1

sizeof ×1

vector ×1