Это действительно похоже на преждевременную оптимизацию; потому что вы просите быстрее, но вы не указали, насколько быстро достаточно быстро. Тем не менее, если вам действительно нужно сделать это таким образом ...
Советы по ускорению распределения:
- Делать меньше ассигнований
- Делать меньшие выделения
Как видите, если вам нужно выделить 10М, эти советы скоро станут противоречивыми. Чтобы определить правильный баланс между меньшими и меньшими распределениями, необходимо выполнить профилирование.
Посмотрите на размер вашего блока памяти и выделите целые страницы памяти одновременно. Это старый аппаратный взлом, но он гарантирует, что вы не запрашиваете несколько страниц непрерывной памяти одновременно (что ускоряет выбор из списков свободных страниц), а также гарантирует, что вы не тратите несколько циклов адреса пространство, запрашивая адреса, уже зарезервированные подсистемой резервирования блока диспетчера памяти.
Если это не дает нужной вам производительности, перепишите код, чтобы он не требовал распределения так, как он был представлен.
В любом случае невозможно гарантировать оптимальную скорость выделения без подробного знания того, как на самом деле спроектирована подсистема управления памятью на вашем компьютере.