Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有关内存缓存的指针性能 考虑下面的C++代码: struct Data; std::vector<Data> vData; std::vector<Data*> vPointers; struct数据; std::矢量数据; std::向量向量指针;_C++_Performance_Pointers_Caching_Containers - Fatal编程技术网

有关内存缓存的指针性能 考虑下面的C++代码: struct Data; std::vector<Data> vData; std::vector<Data*> vPointers; struct数据; std::矢量数据; std::向量向量指针;

有关内存缓存的指针性能 考虑下面的C++代码: struct Data; std::vector<Data> vData; std::vector<Data*> vPointers; struct数据; std::矢量数据; std::向量向量指针;,c++,performance,pointers,caching,containers,C++,Performance,Pointers,Caching,Containers,这两个阵列vData和vPointers将位于两个小型缓存友好型内存块中 如果我需要遍历VPointer,取消引用每个指针并访问原始向量中的一些数据成员,我是否会在循环的每次迭代中导致缓存未命中,从而导致性能的显著损失 如果是这样,有没有一种简单的方法可以避免这种情况?缓存未命中对性能的影响可能相当大。例如,请参阅Stroustrup,其中介绍了从2012年开始的列表与向量性能。对你的计划有多大的影响只能通过测量来确定 至于“如何避免这种情况?”: 例如,您可以使用一个std::vector,让

这两个阵列vData和vPointers将位于两个小型缓存友好型内存块中

如果我需要遍历VPointer,取消引用每个指针并访问原始向量中的一些数据成员,我是否会在循环的每次迭代中导致缓存未命中,从而导致性能的显著损失


如果是这样,有没有一种简单的方法可以避免这种情况?

缓存未命中对性能的影响可能相当大。例如,请参阅Stroustrup,其中介绍了从2012年开始的列表与向量性能。对你的计划有多大的影响只能通过测量来确定

至于“如何避免这种情况?”:


例如,您可以使用一个
std::vector
,让小的子系统保存对所述向量的引用。

这篇文章()是我想到的第一件事,这是一个有趣的视频。是否有更多关于列表与向量的深入研究,或者至少有一些关于如何在使用向量时最大限度地提高效率的文章?在这个主题上不可能有“深入研究”或类似的内容,因为性能影响在很大程度上取决于您的代码、编译器、,从字面上来说,获取代码性能信息的唯一方法是测量。你能说的是,像指针这样的间接操作会损害性能,这是否重要取决于你自己。