可能重复:c malloc和calloc之间的区别
是否有任何情况你更喜欢malloc而不是calloc . 我知道malloc和calloc都动态分配内存,而calloc也将所有内存中的所有位初始化为零 . 从这个我会猜测它总是更好地使用calloc而不是malloc . 或者在某些情况下malloc更好?表现可能是?
如果需要动态分配的内存为零初始化,则使用 calloc .
calloc
如果您不需要动态分配的内存进行零初始化,则使用 malloc .
malloc
您并不总是需要零初始化内存;如果你不需要零初始化的内存,不要支付初始化它的成本 . 例如,如果您分配内存然后立即复制数据以填充分配的内存,则没有理由执行零初始化 .
calloc 和 malloc 是执行不同操作的函数:使用最适合您需要完成的任务的函数 .
如果你不小心,依赖calloc的零初始化可能是危险的 . 归零内存为整数类型提供0,为预期的char类型提供\ 0 . 但它不一定对应于float / double 0或NULL指针 .
由 calloc 零初始化的're normally allocating memory with the specific intent of storing something there. That means (at least most of) the space that'很快将被其他值覆盖 . 因此,大多数代码使用 malloc 来获得一些额外的速度而没有真正的损失 .
我见过的唯一一个用于 calloc 的代码是(据称)基于Java相对于C的速度的基准 . 在C版本中,它使用 calloc 分配了一些内存,然后使用 memset 再次初始化内存(在我看来)是一个相当透明的尝试,产生有利于Java的结果 .
memset
3 回答
如果需要动态分配的内存为零初始化,则使用
calloc
.如果您不需要动态分配的内存进行零初始化,则使用
malloc
.您并不总是需要零初始化内存;如果你不需要零初始化的内存,不要支付初始化它的成本 . 例如,如果您分配内存然后立即复制数据以填充分配的内存,则没有理由执行零初始化 .
calloc
和malloc
是执行不同操作的函数:使用最适合您需要完成的任务的函数 .如果你不小心,依赖calloc的零初始化可能是危险的 . 归零内存为整数类型提供0,为预期的char类型提供\ 0 . 但它不一定对应于float / double 0或NULL指针 .
由
calloc
零初始化的're normally allocating memory with the specific intent of storing something there. That means (at least most of) the space that'很快将被其他值覆盖 . 因此,大多数代码使用malloc
来获得一些额外的速度而没有真正的损失 .我见过的唯一一个用于
calloc
的代码是(据称)基于Java相对于C的速度的基准 . 在C版本中,它使用calloc
分配了一些内存,然后使用memset
再次初始化内存(在我看来)是一个相当透明的尝试,产生有利于Java的结果 .