我正在使用C中的大型数组进行数值计算。
在其中一个函数中,我使用了一些临时的本地(一次性)数组。通常我会将这些声明为double v[N]
,然后不必担心必须手动释放内存。
我注意到的问题是,当我的N变得非常大(超过400万)时,我的程序无法声明变量。因此我使用了malloc()
和free()
,这使我能够成功运行该程序。问题是当我使用动态分配(对于较小的N)时,我的执行时间几乎从24秒增加到40秒。
我可以修改代码以避免首先创建这些临时数组,但这会影响代码的可读性和编码工作量。我目前正在使用预处理器宏来访问矢量,就像2D矩阵一样。是否有另一种解决方案可以避免CPU成本,同时允许我像矩阵一样保存数据?
答案 0 :(得分:1)
当您声明方法的本地变量时,您正在处理堆栈上的自动分配变量,遗憾的是堆栈大小有限。使用malloc
意味着变量将在堆上分配,时间差是您为该动态分配所支付的。
我看到两种可能的解决方案:
static
全局数组(并在必要时重用它),以便编译器能够优化对它的访问