Что означает первый "c" в "calloc"?
Студент задал вопрос, и я точно не знал.
Угадывается: "подсчитывается", "очищается", "разделяется", "завершается",...
Стандартная документация по библиотеке не говорит, что она обозначает, и нет аналогично названных функций, которые указывали бы на шаблон. Кто-нибудь знает настоящую этимологию и, возможно, имеет авторитетную ссылку на ее поддержку?
Ответы
Ответ 1
В соответствии с выдержкой из книги Системное программирование Linux (Роберт Лав), официальные источники не существуют в этимологии calloc
.
Некоторые правдоподобные кандидаты выглядят следующим образом:
Ответ 2
Я провел некоторое исследование и нашел следующее в " UNIX @TIME-SHARING SYSTEM:
UNIX PROGRAMMER MANUAL. Седьмое издание, том 2 ", глава" ПРОГРАММИРОВАНИЕ " (курсив мой):
char *malloc(num);
выделяет num
байты. Возвращаемый указатель достаточно хорошо выровнен для использования в любых целях. NULL
возвращается, если пространство не доступно.
char *calloc(num, size);
выделяет пространство для num
элементов каждого размера size
. Предполагается, что пространство будет установлено равным 0, а указатель достаточно хорошо выровнен для использования в любых целях. NULL
возвращается, если пространство не доступно.
cfree(ptr) char *ptr;
Пробел возвращается в пул, используемый calloc
. Отклонение можно ожидать, если указатель не получен из calloc
.
-
Последнее предложение является очевидным доказательством того, что calloc()
определенно (должен быть?), более отличающийся от malloc()
, а затем просто очистив память.
Интересно, что нет ссылки на free()
на любой из этих сто страниц...: -)
-
Кроме того, UNIX V6 уже имел calloc()
, который вызывает alloc()
. Источник (связанный) не показывает никакого подхода к нулевому из памяти.
В заключение из обоих приведенных выше фактов я категорически возражаю против теории о том, что ведущий "c" в calloc()
означает "ясный".
Ответ 3
Я не думаю, что кто-нибудь знает. Но описывая вызов calloc() с семантикой, что память должна быть очищена, а не malloc (memory allocate), которая возвращает любой случайный мусор, оставшийся от предыдущей операции free(), является полезным модусом для студентов, который полезен тем, что он напоминает пользователю, что malloc() возвращает небезопасное значение.
Ответ 4
calloc
= смежное выделение памяти.
Это означает, что в соответствии с синтаксисом calloc()
i.e
void *calloc (size_t number_of_blocks, size_t size_of_each_block_in_bytes);
он получает два параметра: нет. блоков и размера одного блока, поэтому он выделяет массив памяти для no. блоков, которые вы предоставите.