什么更快 - 使用int * s = new int [size]或int s [size] + std :: fill_n(s,size,0);?

时间:2014-10-22 17:41:15

标签: c++ performance new-operator

我只是想知道...阅读有关malloc和静态分配的内容。很明显,静态方式更快。但是这个怎么样:而不是做:

int *s = new int[100];

我会写:

int s[100];

然后使用:

std::fill_n(s, 100, 0);

它会更快吗?我的意思是,我有两个操作,而不仅仅是一个:

int s[100];std::fill_n(s, 100, 0);而非int *s = new int[100];

1 个答案:

答案 0 :(得分:2)

这两个表达式不等同:

  • 第一个从动态商店分配一个数组(也称为"堆"),
  • 第二个在自动存储中分配一个数组(也称为"堆栈")。
  • 第一个表达式没有对数组进行值初始化
  • 第二个表达式使用明确的零填充数组

一般来说,堆栈操作更快,因为它们是在硬件中实现的:本质上,分配部分是免费的。另一方面,new[]delete[]的调用也经过了大量优化,因此在大多数情况下您会看到很小的差异。

如果您希望用零初始化new数组,则需要在数组大小之后加上括号,如下所示:

int *s = new int[100]();
//                   ^^