Вот простой пример, чтобы объяснить проблему (с C++):перераспределить память, чтобы избежать фрагментации памяти
A* a1 = new A;
A* a2 = new A;
A* a3 = new A;
delete(a2);
B* b = new B;
.
.
.
скажем, размером с A
объекта 3, и размер B
объект 4, и размер моей кучи 12, после удаления a2, память будет выглядеть следующим образом:
XXX --- XXX ---
я не могу создать объект B* b
, даже если памяти достаточно, так как она не соприкасается.
Просто простой пример фрагментации памяти.
Могу ли я избежать этого динамически создавая своего рода reallocate()
функции, функцию, которая будет «двигаться» память объекта a3
и поставить его сразу после:
XXXXXX ------
Эта функция, очевидно, должна быть вызвана после удаления a2
, поэтому, возможно, переобучение deallocate()
или delete()
может это сделать, как я могу это сделать, пожалуйста?
Это просто очень простой пример, чтобы показать тип проблемы я имею дело с
Позвольте вашей ОС заботиться о фрагментации памяти. Не пытайтесь, а потом догадывайтесь об этом. Если вы действительно хотите что-то сделать, создайте std :: vector и используйте это. Вы можете использовать другой вектор int для хранения индексов «удаленных» объектов. – Robinson
Это просто простой пример: я на самом деле работаю над очень большим проектом. –
Сначала вам нужно доказать, что фрагментация является проблемой для вашего программного обеспечения. Как только вы это сделаете, если вам не нравится стратегия распределения/перераспределения ОС, вы можете сделать свой собственный. Я бы не стал пытаться взломать диспетчер памяти OS для вашего проекта. – Robinson