Я заметил, что реализация std:: map Visual Studio (2010) выделяет новый единый блок памяти для каждого node в его красно-черном дереве. То есть для каждого элемента карты один новый блок необработанной памяти будет выделяться через operator new ... malloc
с помощью схемы распределения по умолчанию для std:: map реализации Visual Studio STL.
Это кажется мне немного расточительным: не имеет смысла выделять узлы в блоках "(small) n", так же как реализация std::vector чрезмерно распределяется на рост?
Итак, я хотел бы пояснить следующие моменты:
- Является ли мое утверждение о схеме распределения по умолчанию действительно правильным?
- Выполняют ли все "STL-реализации" std:: map таким образом?
- Есть ли что-нибудь в std, препятствующее реализации std:: map от размещения его узлов в блоках памяти вместо размещения нового блока памяти (через его распределитель) для каждого node? (Гарантии сложности и т.д.)?
Примечание: речь идет не о преждевременной оптимизации. Если его о оптимизации, то о том, есть ли у приложения проблемы с (фрагментацией памяти памяти std::), существуют ли альтернативы использованию настраиваемого распределителя, который использует пул памяти? Этот вопрос касается не о пользовательских распределителях, а о том, как реализация карты использует свой распределитель. (Или, надеюсь, это так.)