предпочтение malloc над calloc [дубликат]

Возможные Дубликаты:
C разница между malloc и calloc

есть ли ситуация, когда вы предпочли бы malloc над calloc. я знаю, что malloc и calloc выделяют память динамически, и этот calloc также инициализирует все биты в выделенной памяти до нуля. Из этого я бы предположил, что всегда лучше использовать calloc над malloc. Или есть ситуации, когда malloc лучше? Производительность может быть?

3 ответов


Если вам нужна динамически выделенная память для нулевой инициализации, используйте calloc.

Если вам не нужна динамически выделенная память для нулевой инициализации, используйте malloc.

вам не всегда нужна память с нулевой инициализацией; если вам не нужна память с нулевой инициализацией,не платите за ее инициализацию. Например, если вы выделяете память, а затем скопировать данные для заполнения выделенной памяти, нет никаких оснований для выполнения нулевая инициализация.

calloc и malloc функции, которые делают разные вещи: используйте тот, который наиболее подходит для задачи, которую вам нужно выполнить.


полагаться на нулевую инициализацию calloc может быть опасно, если вы не будете осторожны. Обнуление памяти дает 0 для интегральных типов и \0 для типов символов, как ожидалось. Но это не обязательно соответствует указателям float/double 0 или NULL.


вы обычно выделяете память с определенным намерением хранить что-то там. Это означает (по крайней мере, большую часть) пространства, которое инициализировано нулем calloc скоро будет перезаписано другими значениями. Таким образом, большинство кода использует malloc для немного дополнительной скорости без реальных потерь.

почти единственное использование, которое я видел для calloc был код, который (предположительно) сравнивал скорость Java относительно C++. В версии C++ он выделил некоторую память с calloc, тогда используется memset снова инициализировать память в (как мне показалось) довольно прозрачной попытке получения результатов, которые благоприятствовали Java.