calloc v / s malloc和时间效率

前端之家收集整理的这篇文章主要介绍了calloc v / s malloc和时间效率前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经很感兴趣地阅读了这个帖子 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()之后不需要实际初始化数组.

猜你在找的C&C++相关文章