我饶有兴趣地阅读了这篇文章C malloc和calloc的区别 https://stackoverflow.com/questions/1538420/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,那么我将得到:
场景2
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,garbage2,garbage3],在第二次迭代中我得到 z =[some_result,another_result,garbage3] 等等on,那么我需要在 malloc 之后专门初始化我的数组吗?
假设两个示例中初始化的内存总量相同,则分配内存calloc()
可能比分配内存更快malloc()
然后在一个单独的步骤中将它们归零,特别是如果在malloc()
如果您通过在循环中迭代它们来单独将元素归零。 Amalloc()
随后是一个memset()
可能会和calloc()
.
如果您在实际将计算结果存储到数组元素之前不关心数组元素是垃圾,则无需在之后实际初始化数组malloc()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)