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

C - Управление памятью

В этой главе объясняется динамическое управление памятью в C. Язык программирования C предоставляет несколько функций для выделения памяти и управления ею. Эти функции можно найти в файле . файл заголовка.

<тд>

void *calloc(целое число, целочисленный размер);

Эта функция выделяет массив num элементы, размер каждого из которых в байтах будет равен size .

<тд>

void free(void *address);

Эта функция освобождает блок памяти, указанный по адресу.

<тд>

void *malloc(size_t size);

Эта функция выделяет массив num байт и оставить их неинициализированными.

<тд>

void *realloc(void *address, int newsize);

Эта функция перераспределяет память, увеличивая ее до newsize. .

Серийный номер Функция и описание
1
2
3
4

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

При программировании, если вы знаете размер массива, это легко сделать, и вы можете определить его как массив. Например, чтобы сохранить имя любого человека, оно может содержать до 100 символов, поэтому вы можете определить что-то следующим образом —

char name[100];

Но теперь давайте рассмотрим ситуацию, когда вы понятия не имеете о длине текста, который вам нужно сохранить, например, вы хотите сохранить подробное описание темы. Здесь нам нужно определить указатель на символ, не определяя, сколько памяти требуется, а позже, в зависимости от требований, мы можем выделить память, как показано в приведенном ниже примере —

Живая демонстрация
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* allocate memory dynamically */
   description = malloc( 200 * sizeof(char) );
	
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   } else {
      strcpy( description, "Zara ali a DPS student in class 10th");
   }
   
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат.

Name = Zara Ali
Description: Zara ali a DPS student in class 10th

Та же программа может быть написана с использованием calloc(); единственное, что вам нужно заменить malloc на calloc следующим образом —

calloc(200, sizeof(char));

Таким образом, у вас есть полный контроль, и вы можете передать любое значение размера при выделении памяти, в отличие от массивов, где после определения размера вы не можете его изменить.

Изменение размера и освобождение памяти

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

Кроме того, вы можете увеличить или уменьшить размер выделенного блока памяти, вызвав функцию realloc(). . Давайте еще раз проверим приведенную выше программу и воспользуемся функциями realloc() и free() —

Живая демонстрация
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* allocate memory dynamically */
   description = malloc( 30 * sizeof(char) );
	
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   } else {
      strcpy( description, "Zara ali a DPS student.");
   }
	
   /* suppose you want to store bigger description */
   description = realloc( description, 100 * sizeof(char) );
	
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   } else {
      strcat( description, "She is in class 10th");
   }
   
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );

   /* release memory using free() function */
   free(description);
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат.

Name = Zara Ali
Description: Zara ali a DPS student.She is in class 10th

Вы можете попробовать приведенный выше пример без перераспределения дополнительной памяти, и функция strcat() выдаст ошибку из-за отсутствия доступной памяти в описании.


Язык C

  1. Постоянная память (ПЗУ)
  2. Микропроцессоры
  3. Управление памятью C++:создание и удаление
  4. C Динамическое выделение памяти
  5. Java — комментарии к документации
  6. Динамическая память С++
  7. Java 10 — выделение кучи
  8. Справочник по управлению техническим обслуживанием
  9. Мероприятия по управлению активами 2012 г.
  10. 4 цели управления активами