我饶有兴趣地阅读了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的真正节省不是自己编写代码。
calloc
和memset
方法应该大致相同,并且可能比自己归零更快。
无论如何,它都与您在主循环中所做的相关,这可能会大一些数量级。
您在3.中陈述的观点似乎表明案件或不必要的初始化。 这是非常糟糕的速度,不仅耗费时间浪费,而且由于它而发生了大量的缓存驱逐。
执行memset()
或bzero()
(无论如何都是由calloc()
调用)是使大部分缓存无效的好方法。 除非您确定不会覆盖所有内容,但仍然可以读取未写入的缓冲区部分(如果0是可接受的默认值),请不要这样做。 如果你无论如何你都写了所有的意思,不要不必要地初始化你的记忆。
不必要的内存写入不仅会破坏您的应用程序性能,还会破坏与其共享相同CPU的所有应用程序的性能。
malloc比Calloc更快,因为malloc返回内存,因为它来自操作系统。 但是当你调用Calloc时,它会从内核或操作系统获取内存,并使用零进行初始化,然后返回给你。 所以,初始化需要时间。 这就是为什么malloc比Calloc更快的原因
malloc
因calloc
的不同而有两个原因
我认为,这就是为什么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