Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

malloc() и calloc():основные различия объясняются примерами

Прежде чем изучать разницу между malloc и calloc, давайте изучим-

Что такое динамическое выделение памяти?

Динамическое выделение памяти — это процесс выделения памяти во время выполнения. Существует четыре библиотечных подпрограммы:calloc(), free(), realloc() и malloc(), которые можно использовать для выделения памяти и ее освобождения во время выполнения программы. Эти подпрограммы определены в заголовочном файле с именем stdlib.h.

Что такое malloc()?

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

Возвращаемый указатель обычно имеет тип void. Это означает, что мы можем назначить функцию malloc любому указателю. Полная форма malloc — выделение памяти.

Из этого руководства вы узнаете:

Что такое calloc()?

Функция Calloc() используется для выделения нескольких блоков памяти. Это функция динамического выделения памяти, которая используется для выделения памяти для сложных структур данных, таких как массивы и структуры. Если этой функции не удается выделить достаточно места, как указано, она возвращает нулевой указатель. Полная форма calloc-функции — непрерывное выделение.

Зачем использовать malloc()?

Вот причины использования malloc()

Зачем использовать calloc()?

Вот причины использования calloc()

Синтаксис malloc()

Вот синтаксис malloc()

ptr = (cast_type *) malloc (byte_size);

В приведенном выше синтаксисе ptr является указателем cast_type. Функция malloc возвращает указатель на выделенную память размером byte_size.

Example: ptr = (int *) malloc (50)

При успешном выполнении этого оператора резервируется 50 байт памяти. Адрес первого байта зарезервированного пространства присваивается указателю «ptr» типа int.

Синтаксис calloc()

Вот синтаксис malloc()

ptr = (cast_type *) calloc (n, size);

Приведенный выше синтаксис используется для выделения n блоков памяти одинакового размера. После выделения памяти все байты инициализируются нулями. Возвращается указатель, который в данный момент находится в первом байте выделенного пространства памяти.

Пример malloc() в C

В приведенном ниже коде sizeof(*ptr) используется для выделения блока памяти из 15 целых чисел. В операторе printf мы находим значение 6-го целого числа.

#include<stdlib.h>
#include<stdio.h>
int main(){
int *ptr;
ptr = malloc(15 * sizeof(*ptr)); 
    if (ptr != NULL) {
      *(ptr + 5) = 480; 
      printf("Value of the 6th integer is %d",*(ptr + 5));
    }
}

Вывод:

Значение 6-го целого числа равно 480

Пример calloc() в C

Приведенная ниже программа на языке C вычисляет сумму первых десяти членов. Если значение указателя равно нулю, то место в памяти не будет выделено.

Цикл for используется для повторения значения переменной «i» и вывода суммы. Наконец, функция free используется для освобождения указателя.

#include <stdio.h>
#include <stdlib.h>
    int main() {
        int i, * ptr, sum = 0;
        ptr = calloc(10, sizeof(int));
        if (ptr == NULL) {
            printf("Error! memory not allocated.");
            exit(0);
        }
        printf("Building and calculating the sequence sum of the first 10 terms \n");
        for (i = 0; i < 10; ++i) { * (ptr + i) = i;
            sum += * (ptr + i);
        }
        printf("Sum = %d", sum);
        free(ptr);
        return 0;
    }

Вывод:

Построение и вычисление суммы последовательности первых 10 членов n Sum =45

Разница между calloc() и malloc()

Вот важное различие между malloc() и calloc():

маллок() вызов() Функция Malloc() создаст один блок памяти размера, указанного пользователем. Функция Calloc() может назначить несколько блоков памяти для переменной. Функция Malloc содержит значение мусора. Блок памяти, выделенный функцией calloc, всегда инициализируется для ноль. Количество аргументов равно 1. Количество аргументов равно 2. Calloc медленнее, чем malloc. Malloc быстрее, чем calloc. Это небезопасно по сравнению с calloc. Это безопасно в использовании по сравнению с malloc. ().Эффективность времени ниже, чем у malloc(). Функция Malloc() возвращает только начальный адрес и не делает его равным нулю. Перед выделением адреса функция Calloc() возвращает начальный адрес и делает его равным нулю. Она не выполняет инициализацию памяти. Он выполняет инициализацию памяти.

КЛЮЧЕВЫЕ ОТЛИЧИЯ:


Язык C

  1. Выражения, операторы и блоки C# (с примерами)
  2. Цикл C++ do…while с примерами
  3. Указатели C++ с примерами
  4. Тип данных Char C++ с примерами
  5. Перегрузка оператора C++ с примерами
  6. Функции C++ с примерами программ
  7. Учебное пособие по коллекциям C# с примерами
  8. Разница между while и do-while:объяснение с примерами
  9. Функция calloc() в библиотеке C с программой ПРИМЕР
  10. Количество строк Python() с ПРИМЕРАМИ