Подтвердить что ты не робот

Что означает первый "c" в "calloc"?

Студент задал вопрос, и я точно не знал.

Угадывается: "подсчитывается", "очищается", "разделяется", "завершается",...

Стандартная документация по библиотеке не говорит, что она обозначает, и нет аналогично названных функций, которые указывали бы на шаблон. Кто-нибудь знает настоящую этимологию и, возможно, имеет авторитетную ссылку на ее поддержку?

4b9b3361

Ответ 1

В соответствии с выдержкой из книги Системное программирование Linux (Роберт Лав), официальные источники не существуют в этимологии calloc.


Некоторые правдоподобные кандидаты выглядят следующим образом:

  • Считать или подсчитать, потому что calloc принимает отдельный аргумент count.
  • Очистить, поскольку он гарантирует, что фрагмент возвращенной памяти будет очищен.

    • Брайан Керниган, как сообщается, считает, что "c" означает четкое (хотя он признал, что не уверен).
    • (См. комментарии.) Ранняя calloc.c, похоже, содержит явную ссылку на слово clear в комментарии к исходному коду (но нет ссылки на количество слов или на любого другого кандидата). В другом комментарии к исходному коду в файле malloc.c слово clear появляется снова, ссылаясь на слово calloc.
  • C, как на языке C.

    • (См. alk answer и комментарии.) Возможно, соглашение об именах для набора функций, которые были введены примерно в одно и то же время.

Ответ 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. блоков, которые вы предоставите.