使用大型本地数组:有没有比malloc更快的方法?

时间:2013-12-06 03:51:43

标签: c arrays malloc large-data

我正在使用C中的大型数组进行数值计算。

在其中一个函数中,我使用了一些临时的本地(一次性)数组。通常我会将这些声明为double v[N],然后不必担心必须手动释放内存。

我注意到的问题是,当我的N变得非常大(超过400万)时,我的程序无法声明变量。因此我使用了malloc()free(),这使我能够成功运行该程序。问题是当我使用动态分配(对于较小的N)时,我的执行时间几乎从24秒增加到40秒。

我可以修改代码以避免首先创建这些临时数组,但这会影响代码的可读性和编码工作量。我目前正在使用预处理器宏来访问矢量,就像2D矩阵一样。是否有另一种解决方案可以避免CPU成本,同时允许我像矩阵一样保存数据?

1 个答案:

答案 0 :(得分:1)

当您声明方法的本地变量时,您正在处理堆栈上的自动分配变量,遗憾的是堆栈大小有限。使用malloc意味着变量将在堆上分配,时间差是您为该动态分配所支付的。

我看到两种可能的解决方案:

  • 使用static全局数组(并在必要时重用它),以便编译器能够优化对它的访问
  • 更改堆栈大小,以便您的函数本地更大的数组不会出现问题,甚至可以动态完成,看看here