Создаются по следующим причинам:
1. для защиты компонентов кучи.
2. для более эффективного управления памятью.
3. для локализации доступа.
Рассмотрим вариант 1. Пусть есть 2 потока:
A3 … B1 A2 B2 B3 A1 |
Thread1 – Func1 – A
Thread2 – Func2 – B
куча
Имеется ошибка в программном коде Func1, которая приводит к тому, что после заполнения А1 записывается несколько дополнительных байт. Будут запорчены данные В3.
Программист сделает предположение, что ошибка в коде функции Func2. А если бы использовались 2 разные кучи, то локализовать ошибку легче.