Книга: Linux программирование в примерах

3.2.1.5. Выделение с инициализацией нулями: calloc()

3.2.1.5. Выделение с инициализацией нулями: calloc()

Функция calloc() является простой оболочкой вокруг malloc(). Главным ее преимуществом является то, что она обнуляет динамически выделенную память. Она также вычисляет за вас размер памяти, принимая в качестве параметра число элементов и размер каждого элемента:

coordinates = (struct coord*)calloc(count, sizeof(struct coord));

По крайней мере идейно, код calloc() довольно простой. Вот одна из возможных реализаций:

void *calloc(size_t nmemb, size_t size) {
 void *p;
 size_t total;
 total = nmemb * size;   /* Вычислить размер */
 p = malloc(total);      /* Выделить память */
 if (p != NULL)          /* Если это сработало - */
 memset(p, '', total); /* Заполнить ее нулями */
 return p; /* Возвращаемое значение NULL или указатель */
}

Многие опытные программисты предпочитают использовать calloc(), поскольку в этом случае никогда не возникает вопросов по поводу вновь выделенной памяти.

Если вы знаете, что вам понадобится инициализированная нулями память, следует также использовать calloc(), поскольку возможно, что память, возвращенная malloc(), уже заполнена нулями. Хотя вы, программист, не можете этого знать, calloc() может это знать и избежать лишнего вызова memset().

Оглавление книги


Генерация: 1.182. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз