Я обнаружил, что много раз мне нужен только небольшой std::map
(скажем, менее 10 ключей) или небольшой std::vector
, содержащий только несколько элементов, и я думаю, что это действительно пустая трата времени, чтобы всегда динамически выделять их, особенно в таких структурах, как std::map<std::string, std::string>
, std::vector<std::string>
, там действительно много динамического распределения.Как избежать динамического выделения небольших объектов?
Хороший совет? По крайней мере, уменьшите количество динамического распределения, лучше, не ухудшая простоту использования. Благодаря
Вообще, если это узкое место в вашем коде один подход заключается в написании или использовать [пул памяти] (HTTPS : //stackoverflow.com/questions/16378306/c11-memory-pool-design-pattern). По сути, вы предварительно выделяете кучу памяти, а затем просто переделываете ее снова и снова, не перераспределяя ее. – CoryKramer
Если вы работаете с критическим поломкой, вы всегда можете выделить место во время инициализации. Если вам нужна какая-то реальная производительность или есть узкое место, вам придется написать специализированный распределитель памяти. – P0W
Вы действительно измерили затраты на такие распределения? Просто «мышление» фрагмента кода как узкое место - это руководство для изменения кода. Итак, сначала выполните некоторые меры, чтобы подтвердить, что это усилие. – rpy