c/c++语言开发共享calloc v / s malloc和时间效率

我饶有兴趣地阅读了malloc和calloc之间C后差异 。 我在我的代码中使用了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 

我有三个问题:

    假设在两个示例中初始化的内存总量相同,使用calloc()分配内存可能比使用malloc()分配内存然后在单独的步骤中将它们归零更快,尤其是在malloc() case通过在循环中迭代它们来单独归零元素。 malloc()后跟memset()可能与calloc()一样快。

    如果在将实际存储计算结果之前不关心数组元素是垃圾,则不需要在malloc()之后实际初始化数组。

    对于1和2,两者都做同样的事情:allocate和zero,然后使用数组。

    对于3,如果您不需要首先将数组归零,那么归零是不必要的,而不是更快。

    calloc的归零有可能比你编写的代码更有效,但与程序的其他工作相比,这种差异会很小。 calloc的真正节省不是自己编写代码。

    callocmemset方法应该大致相同,并且可能比自己归零更快。

    无论如何,它都与您在主循环中所做的相关,这可能会大一些数量级。

    您在3.中陈述的观点似乎表明案件或不必要的初始化。 这是非常糟糕的速度,不仅耗费时间浪费,而且由于它而发生了大量的缓存驱逐。

    执行memset()bzero() (无论如何都是由calloc()调用)是使大部分缓存无效的好方法。 除非您确定不会覆盖所有内容,但仍然可以读取未写入的缓冲区部分(如果0是可接受的默认值),请不要这样做。 如果你无论如何你都写了所有的意思,不要不必要地初始化你的记忆。

    不必要的内存写入不仅会破坏您的应用程序性能,还会破坏与其共享相同CPU的所有应用程序的性能。

    malloc比Calloc更快,因为malloc返回内存,因为它来自操作系统。 但是当你调用Calloc时,它会从内核或操作系统获取内存,并使用零进行初始化,然后返回给你。 所以,初始化需要时间。 这就是为什么malloc比Calloc更快的原因

    malloccalloc的不同而有两个原因

    我认为,这就是为什么malloc处理速度比calloc更快的原因

    需要了解更多c/c++开发分享calloc v / s malloc和时间效率,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享calloc v / s malloc和时间效率相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/980220.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐