Что такое Memory Heap?

Vim против использования памяти Emacs Изучение

Heap — это области памяти, выделенные для каждой программы. Память, выделенная для кучи, может быть выделена динамически, в отличие от памяти, выделенной для стека.

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

Heap памяти также известна как «динамическая» память.

Память кучи отличается от памяти локального стека. Он отличается не только тем, как он выделяет и освобождает переменные при вызове функции, но и тем, как он освобождает переменную при выходе из функции. Этот «блок» памяти обычно определяется автоматически в зависимости от размера создаваемого ими объекта.

Преимущества динамической памяти:

  • Куча не имеет ограничений на размер памяти.
  • Это позволяет вам обращаться к переменным глобально.
  • Сборка мусора выполняется в памяти кучи, чтобы освободить память, используемую объектом.
  • Метод кучи также используется в очереди приоритетов.

Недостатки динамической памяти:

  • Выполнение занимает слишком много времени по сравнению со стеком.
  • Для вычисления требуется больше времени.
  • Он может предоставить максимальную память, которую может предоставить ОС.
  • Управление памятью в куче сложнее, так как она используется глобально.

Проблемы, которые можно решить с помощью динамической памяти:

Ниже приведены некоторые важные моменты, касающиеся сборки мусора.

  • Виртуальная машина Java вызывает сборку мусора, чтобы избавиться от неиспользуемых объектов памяти кучи. Он удаляет все объекты, которые больше не используются работающей программой Java. В этом процессе неиспользуемая память освобождается для использования другими новыми объектами.
  • Сборка мусора вызывает метод finalize()объекта, прежде чем удалить его из памяти и дать ему возможность очиститься. Если программист не переопределит этот метод, будет вызван метод finalize по умолчанию (метод, определенный в классе Object).
  • Сборка мусора вызывается на основе размера динамически выделенной памяти из кучи. Это медленно и трудно предсказать. Программам с ограничениями производительности в реальном времени может быть трудно справиться с этим.
Читайте также:  Тенденции разработки программного обеспечения в 2021

Пример создания memory in heap:

С++

int Geeks()
{
    // Nothing allocated yet excluding the
    // pointer itself, which is allocated
    // here on the stack.
    char* p;
 
    // Memory allocated on the stack.
    bool flag = true;
 
    if (flag) {
 
        // Create 1000 bytes on the stack
        char buffer[1000];
 
        // Create 1000 bytes on the heap
        p = new char[1000];
    }
 
    // buffer is deallocated here but pointer
    // p is not Here occurs a memory leak,
    // We have to call delete[] p;
}

Points to Remember:

1 Он хранится в оперативной памяти компьютера так же, как стек.
2 Он имеет более медленное распределение переменных по сравнению с переменными в стеке.
3 Он работает на основе использования по запросу выделения блока данных для использования программой.
4 Он может иметь фрагментацию, когда есть много выделений и освобождений.
5 В C++ переменные в куче должны быть уничтожены вручную и никогда не выпадать из области видимости. Данные освобождаются с помощью delete, delete[] или free.
6 В C++ или C данные, созданные в куче, будут указываться указателями и размещаться с помощью new или malloc соответственно.
7 Мы можем использовать динамическую память, если вы точно не знаете фактический размер данных, необходимых во время выполнения, или если вам нужно выделить много данных.
8 Он отвечает за утечки памяти.
Оцените статью
bestprogrammer.ru
Добавить комментарий