什么是更快:创建一个新数组或迭代现有?

Tem*_*mak 2 c++ java arrays initialization

我有一个数组,例如(在Java中)

int[] a = new int[N];
Run Code Online (Sandbox Code Playgroud)

我已经使用它,现在想要有零的数组.什么将花费更少的时间:创建一个新的数组(它将被初始化为零)或迭代现有的数组并用零填充?

我想无论答案是什么,它在C++中都是一样的?

Man*_*agu 5

填充现有阵列比创建新阵列更好.相对而言,内存分配可能非常昂贵.实际上,如果你最喜欢的语言为你提供了保证被清零的新阵列,它可能会为你填补它们.

也就是说,这种选择是微观优化.在大多数情况下,它不会产生任何明显的差异.如果你发现自己处于一个特定的情况,你认为它可能会产生重大影响,那么问问分析器要比问StackOverflow要好得多.

编辑我将再添加一个警告:特别是在Java等垃圾收集语言中,如果可以干净地重复使用,那么最好重新使用现有对象而不是创建新对象.一般的经验法则.

Reedit ...除非预期的对象非常短暂.可能还有一些额外的警告.然后回到"询问剖析器".

  • 作为一般的经验法则,*edit*有点偏.使用世代GC分配的成本是*非常小*(我认为它是大约7个处理器指令)因此在这种特定情况下的成本不会高很多.此外,在一般情况下,在分代GC中,最好创建一个新对象,而不是出于不同原因重用:当GC运行时,旧代需要移动到新GC,这可能需要内容的完整副本,而删除的对象没有成本. (2认同)