Четверг, 28.11.2024, 21:46
Приветствую Вас, Гость |
Меню сайта
Наш опрос
Нужен ли форум на этом сайте?
Всего ответов: 1313
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Динамическая память в СИ


 Весь объем памяти можно условно разделить на:
  1. системная область, это та память которую занимает операционная система вместе с сервисами и драйверами.
  2. пользовательская область, это та память которая используется хранения программ(и их данных) запущенных
пользователем.
  3. свободная память, а это вся остальная память.

Динамическая память – это область памяти которая была выделена во время работы программы, а не во время ее создания. Есть 2 основных действия которые можно делать с динамической памятью: выделять ее и освобождать.
 В СИ функции для осуществления этих действия описаны в библиотеке stdlib.h.
Далее будет приведено описание функций и примеры на языке си для работы с динамической памятью.
  void * malloc(size_t size); - функция для выделения size байт динамической памяти

Далее пример в котором выделяется память под массив из 10 чисел типа int:
  int *m = (int *)malloc(10*sizeof(int));

  void * calloc(size_t num, size_t size);
- а эта функция сделана специально для выделения памяти под массив(хотя ей можно выделять память и не только под массив), она плюс ко всему при выделении памяти еще заполняет ее нулями.

а теперь повторим предыдущий пример выделения памяти, только уже используя функцию calloc:
  int *m = (int *)calloc(10,sizeof(int));
  void * realloc(void *memblock, size_t size);
- функция служащая для изменения размера блока ранее выделенной динамической памяти.

Например, увеличение целочисленного массива до 30-ти элементов:
  m = (int *)realloc(m,30*sizeof(int));

  void free(void *memblock); - функция для освобождения ранее выделенной области динамической памяти.
Например, освобождение блока памяти, выделенного под массив:
  free(m);
 Так же кроме описанных функций с динамической памятью в СИ(выделение и освобождение) часто используются некоторые функции, сейчас мы их рассмотрим.
  void * memcpy(void * restrict targetbuf,const void * restrict sourcebuf,size_t num); - функция служит для копирования size_t байт памяти из sourcebuf в targetbuf.

  void * memmove(void *targetbuf,const void *sourcebuf,size_t num); - а эта функция служит для перемещения size_t байт содержимого блока памяти из sourcebuf в targetbuf .

  int memcmp(const void *buff1,const void *buff2,size_t num); - функция для сравнения двух блоков памяти, если они равны то функция вернет 0.

  void * memset(void *buff, int c, size_t num); - функция для заполнения какими-то данными блока динамической памяти.

Примеры решения задач на динамическую память в СИ.
Форма входа
Поиск
Мы в сети
Реклама
Для того чтобы не видеть рекламу в правом верхнем углу сайта пройдите простую процедуру регистрации
ФОРУМ
У нас наконецто появился форум! Добро пожаловать! Будьте первыми, задайте направление форуму! =)
--- Не стесняемся - заходим на форум! ---