C++ 当向量变大时,程序会变慢

C++ 当向量变大时,程序会变慢,c++,opencv,memory,vector,C++,Opencv,Memory,Vector,在一个更大的程序中,我有一个for循环,其中在每次迭代中都有一个std::vector 将生成ofcv::Mat矩阵(每个元素来自具有不同内核的cv::filter2D调用)。每个这样的向量大小约为90MB,应该是训练集中的一个案例 当在另一个向量(或列表)中推回这些向量时,为了保存训练集中的所有案例,循环会变得越来越慢(尤其是filter2d花费的时间越来越长,即使图像大小始终相同)。当然,内存消耗会增加,但当使用100GB可用RAM中的2GB时,这种效果已经很早就开始了 有没有加快速度的办法

在一个更大的程序中,我有一个for循环,其中在每次迭代中都有一个
std::vector
将生成of
cv::Mat
矩阵(每个元素来自具有不同内核的cv::filter2D调用)。每个这样的向量大小约为90MB,应该是训练集中的一个案例

当在另一个
向量
(或
列表
)中推回这些向量时,为了保存训练集中的所有案例,循环会变得越来越慢(尤其是filter2d花费的时间越来越长,即使图像大小始终相同)。当然,内存消耗会增加,但当使用100GB可用RAM中的2GB时,这种效果已经很早就开始了


有没有加快速度的办法?(windows 8 x64,visual studio 2012 x64)

请指定您使用的操作系统和编译器。例如,Windows x64、VC++2015 x64复制矢量数据意味着新内存。操作系统提供了这种新的内存,速度很慢。试着保留足够的内存,而不是要求大量的小内存块。如果使用的内存太大(2GB),操作系统可能会使用硬盘页面文件内存,这与RAM相比非常慢。只有将90MB的向量保存到另一个向量时,它才会变慢(而不是保存速度慢)。还有大约100GB的可用内存,这就是为什么我想知道为什么它会变慢。你的系统上真的有100GB的ram吗?哇!如果没有,您只需要在ram中有第一个数据量,然后内存请求就会转到HDD上的交换空间,这非常慢。顺便说一句:为什么要把矢量复制到其他矢量中?是的,128GB是免费的,100GB是免费的,所以不涉及硬盘。用于生成和保存培训集。请指定您使用的操作系统和编译器。例如,Windows x64、VC++2015 x64复制矢量数据意味着新内存。操作系统提供了这种新的内存,速度很慢。试着保留足够的内存,而不是要求大量的小内存块。如果使用的内存太大(2GB),操作系统可能会使用硬盘页面文件内存,这与RAM相比非常慢。只有将90MB的向量保存到另一个向量时,它才会变慢(而不是保存速度慢)。还有大约100GB的可用内存,这就是为什么我想知道为什么它会变慢。你的系统上真的有100GB的ram吗?哇!如果没有,您只需要在ram中有第一个数据量,然后内存请求就会转到HDD上的交换空间,这非常慢。顺便说一句:为什么要把矢量复制到其他矢量中?是的,128GB是免费的,100GB是免费的,所以不涉及硬盘。它用于生成和保存训练集。