【发布时间】:2013-12-30 15:51:59
【问题描述】:
如果我使用以下方式分配了大量 (GB) 内存:
int N = ...;
int * array_ = new int[N];
并且使用数组的一小部分,这种方法有什么缺点,除了明显的事实,我在浪费内存?会影响cpu性能还是让程序不稳定?
这背后的原因是避免使用向量类,因为在密集型应用程序中性能会受到很大影响。
【问题讨论】:
-
vector 不会对性能产生巨大影响
-
为什么不将您的方法与使用向量进行比较?
-
嗯,它给出了因为当添加一个新项目时,向量类将所有数组数据复制到一个新数组,然后删除旧数组。基准测试显示命中率至少为 50%,在某些情况下为 100%。
-
既然您无论如何都无法重新调整原始数组的大小,您的反对意见似乎没有意义 - 为什么不分配一个大向量,这样您就不必重新调整它的大小?
-
@SkyRipper 它给出了因为当添加一个新项时,向量类将所有数组数据复制到一个新数组中,然后删除旧数组——不,它可能不会总是这样做。您也可以使用 vector
::reserve() 避免重新分配