Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/117: Рейтинг темы: голосов - 117, средняя оценка - 4.90
7 / 6 / 0
Регистрация: 26.10.2010
Сообщений: 249

В чем разница malloc и calloc?

22.12.2010, 17:27. Показов 24966. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
подскажите пожалуйста,в чем разница malloc и calloc?
эмалок выделение динамической памяти а сиалок выделение чистой памяти. в смысле чистой?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2010, 17:27
Ответы с готовыми решениями:

В чем разница между malloc() и (char *)malloc()
Прошу помочь разобраться: не могу понять в чем разница междуs=malloc(sizeof(char)); иs=(char *)malloc(sizeof(char));Буду признателен вашим...

Выполнить функциями calloc() или malloc()
Написать пользовательскую функцию, решающую указанную ниже задачу. Массивы А и В динамические, выделение памяти выполнить функциями...

Вместо функции calloc() примените функцию malloc()
Пример 1. Написать программу заполнения матрицы размера n × m нечетными целыми числами с выводом результата на консоль и в текстовый файл....

16
программист С++
 Аватар для sandye51
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
22.12.2010, 17:34
C
1
2
3
char *calloc(n,size);
            unsigned n;           //количество элементов
            unsigned size;        // длина каждого элемента в байтах
Описание

Функция calloc захватывает пространство для хранения масси-

ва из n элементов, каждый длиной size байт. Каждый элемент иници-
ализируется в 0.



C
1
2
3
 char *malloc(size);
               unsigned size;         //количество байтов в захваченном
                                           //блоке
Описание.

Функция malloc захватывает блок памяти по крайней мере не
меньшей, чем из size байтов. (Блок может быть больше, чем size
байтов, принадлежащих пространству, которое требуется для вырав-
нивания и для поддержания информации).
1
7 / 6 / 0
Регистрация: 26.10.2010
Сообщений: 249
22.12.2010, 17:37  [ТС]
другими словами салок выделяет память чтотко на размер массива а эмалок можно взять чуть больше. я правильно понял?)
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
22.12.2010, 17:40
Цитата Сообщение от Егорка47 Посмотреть сообщение
а эмалок можно взять чуть больше
это значит, что она выделяет память, в которую гарантированно влезут некие данные с учетом выравнивания. calloc выделяет только указанный массив и плюс к этому обнуляет все внутри него.
1
7 / 6 / 0
Регистрация: 26.10.2010
Сообщений: 249
22.12.2010, 17:46  [ТС]
в смысле обнуляет?
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
22.12.2010, 17:50
примерно тоже самое, что делает ф-я memset(&buf, 0, sizeof(buf)) - все байты нулю приравнивает
0
7 / 6 / 0
Регистрация: 26.10.2010
Сообщений: 249
22.12.2010, 17:53  [ТС]
я не знаю такой функции..вроде.
все равно не понял..размер будет 0 байт?или что?
простите за возможно глупые вопросы
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
22.12.2010, 17:58
нет, был к примеру массив байт, в памяти выглядел так:
{0x01, 0xA2, 0xFA, 0xFF, 0x00, 0x33}
т.е. память была кем то "загажена" (отсюда к стати и растут ноги, того что переменные перед использованием надо инициализировать)
после мемсета или выделения каллоком стало все по нулям
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
3
7 / 6 / 0
Регистрация: 26.10.2010
Сообщений: 249
22.12.2010, 17:59  [ТС]
спасибо большое,понятно теперь!)
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
07.12.2019, 15:27
Цитата Сообщение от oxotnik Посмотреть сообщение
это значит, что она выделяет память, в которую гарантированно влезут некие данные с учетом выравнивания. calloc выделяет только указанный массив и плюс к этому обнуляет все внутри него.
Не понял данное объяснение, поэтому тоже не понимаю разницы между этими двумя функциями. Кроме как то, что calloc при выделении, сразу инициализирует нулями.

Добавлено через 12 минут
Из данного объяснения еще понял то, что malloc может выделить память не только для массива, но и для любой переменной. Но опять же, переменную можно объявить стандартным способом, зачем тогда использовать для этого функцию malloc?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
07.12.2019, 16:48
В некоторых случаях нам нужна память, изначально содержащая нули. Чтобы например потом заполнить некоторые ячейки, а потом посчитать сумму значений во всех ячейках этой памяти. В других случаях нам всё равно, что там было в памяти, т.к. хотим заново заполнить все её значения. В этом случае предварительное обнуление - лишняя операция, которая впустую будет расходовать такты процессора. А значит её выполнять не нужно.
1
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
07.12.2019, 16:58
TRam_, это все вы объясняете про calloc, вот я и спрашиваю, для чего malloc нужен, если calloc умеет все тоже самое, плюс еще обнуление.
0
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,140
Записей в блоге: 22
07.12.2019, 16:59
Скорость. Нет лишних тактов на обнуление.
0
 Аватар для COKPOWEHEU
4085 / 2683 / 432
Регистрация: 09.09.2017
Сообщений: 11,935
07.12.2019, 17:01
Цитата Сообщение от мама Стифлера Посмотреть сообщение
переменную можно объявить стандартным способом, зачем тогда использовать для этого функцию malloc?
Первое что пришло в голову, где используется выделение памяти под отдельные переменные - связный список, ну и подобные динамические структуры.
Второе - скрытие деталей реализации. Если вы не хотите показывать пользователю приватные поля класса, можно вместо них объявить void*, а в конструкторе выделить память под данные уже нужного размера. Разумеется, "класс" не означает только классов в стиле С++, а объектный подход в общем. В Си такое вполне используется.
1
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,140
Записей в блоге: 22
07.12.2019, 17:01
ИМХО зачем что-то заполнять нулями, если потом там будет что-то еще. Лишнее действие.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
07.12.2019, 17:21
Цитата Сообщение от мама Стифлера Посмотреть сообщение
для чего malloc нужен
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
typedef struct MyStruct_s
{
     int a;
     int b;
} MyStruct;
 
MyStruct *test1_return_struct()
{
   MyStruct my1;
   my1.a = 10;
   my1.b = 20;
 
   MyStruct *p_dyn_my1 = malloc(sizeof(MyStruct)); 
   memcpy(p_dyn_my1, &my1, sizeof(MyStruct));  // всё перезаписывается, нет никакого смысла перезаписывать *p_dyn_my1 нулями
   return p_dyn_my1;
};
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13202 / 6837 / 1822
Регистрация: 18.10.2014
Сообщений: 17,296
07.12.2019, 18:55
Цитата Сообщение от Егорка47 Посмотреть сообщение
подскажите пожалуйста,в чем разница malloc и calloc?
Разница между malloc и calloc заключается в

1. Память, указатель на которую возвратил malloc, содержит "мусор". Память, указатель на которую возвратил calloc, сдержит нулевые биты.

2. Функция calloc вычисляет размер требуемого блока памяти путем перемножения своих аргументов. При этом функция calloc несет ответственность за то, чтобы при перемножении не произошло переполнения.

Больше отличий нет.

Сама идея функции calloc заключается в том, что она будет/может выполнять обнуление эффективно, через возможности подлежащей платформы, а не выполнять прямой memset самостоятельно. Например, выделять память из пула уже обнуленной памяти. Или выполнять "виртуальное (ленивое)" обнуление, Это, разумеется, не всегда возможно, но причина существования calloc заключается именно в этой потенциальной возможности.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.12.2019, 18:55
Помогаю со студенческими работами здесь

Отличия между функциями malloc, calloc и realloc и способами их использования
На этом форуме есть множество тем по функциям malloc, calloc и realloc, но я так и не понял чем они друг от друг отличаются и в каких...

В чем преимущества new и delete и могут ли они действительно заменить функции calloc, malloc, free, realloc?
Язык программирования C поддерживает функции динамического управления пямятью: calloc, malloc, free, realloc - которые неподдерживают...

В чем разница между new и malloc()?
Всем доброго дня ! Начал читать книгу Пахомов Б. "C/C++ и MS Visual C++ 2008 для начинающих" До этого прочитал С++ за 21...

В чем разница между malloc и new?
в чем разница? что лучше использовать?

Malloc + reinterept_cast и new. В чем разница?
Уважаемые форумчане, скажите пожалуйста, в чем разница между этим: int* arr_i; arr_i =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru