Вместо того, чтобы создавать систему пула памяти, не могу ли я просто выделить огромные массивы для каждого объекта в начале приложения и просто использовать их, и в крайнем случае какой-то объект нуждается в большем количестве экземпляров, чем его массив, массив просто удвоится или увеличился в четыре раза, чтобы он никогда больше не достиг максимального размера. Мне нужна скорость больше, чем память, поэтому я думаю, что это справедливый компромисс?
Могу ли я просто использовать фиксированные массивы вместо пулов памяти?
Ответы (1)
Единственная разница между тем, что вы описываете, и пулом памяти заключается в том, что обычно распределитель пула выделяет новый пул, когда ему не хватает памяти, а ваш перераспределяет весь массив, если он заканчивается. Это приведет к значительному увеличению времени выполнения в худшем случае, и вам потребуется схема, позволяющая избежать аннулирования указателей и ссылок при перераспределении, что, вероятно, снизит производительность всей программы.
Худший случай в распределителе пула — это когда ему не хватает места и ему приходится выделять новый массив. В худшем случае в вашем распределителе он заканчивается, и ему приходится выделять новый массив большего размера и копировать все старые объекты в новый массив. Очевидно, что последнее займет гораздо больше времени.