我已经很感兴趣地阅读了这个帖子
C difference between malloc and calloc.我在代码中使用了malloc,想知道使用calloc的区别.
我现在(伪)代码与malloc:
情景1
int main() { allocate large arrays with malloc INITIALIZE ALL ARRAY ELEMENTS TO ZERO for loop //say 1000 times do something and write results to arrays end for loop FREE ARRAYS with free command } //end main
如果我使用calloc而不是malloc,那么我会有:
Scenario2
int main() { for loop //say 1000 times ALLOCATION OF ARRAYS WITH CALLOC do something and write results to arrays FREE ARRAYS with free command end for loop } //end main
我有三个问题:
>如果阵列非常大,哪一种场景更有效?
>如果阵列非常大,那么哪些场景将更加节省时间?
>在这两种情况下,我只是在写数组的意义上说,对于for循环中的任何给定的迭代,我将从第一个元素顺序写入每个数组到最后一个元素.重要的问题:如果我在方案1中使用malloc,那么我有必要将元素初始化为零?用malloc说我有数组z = [garbage1,garbage2,garbage 3].对于每次迭代,我正在编写元素,即在第一次迭代中,我得到z = [some_result,garbage3],在第二次迭代中,我得到第一次迭代,another_result,garbage3]等on,那么我需要具体地在malloc之后初始化我的数组?
解决方法
假设您的两个示例中初始化的总内存量是相同的,使用calloc()分配内存可能比使用malloc()分配内存更快,然后在单独的步骤中将其清零,特别是在malloc( )通过在一个循环中迭代它们来单独排除元素. malloc()后跟一个memset()可能会和calloc()一样快.
如果在实际上将计算结果存储在其中之前,不关心数组元素是垃圾,那么在malloc()之后不需要实际初始化数组.