LINUX.ORG.RU

Если ты знаешь, что тебе нужен, скажем миллион элементов, то можешь сразу зарезервировать весь миллион, чтобы память выделялась один раз. Иначе она будет 20 раз перевыделяться и данные будут копироваться. Это, во-первых, слегка сказывается на производительности, во-вторых, уменьшает фрагментацию памяти.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от Selecter

Если юы все! Это еще не все! Если посмотреть стандартный аллокатор для вектора, то откроется интересный факт: каждый раз, когда вектор расширяет свой буфер, он увеличивает его размер в два раза. Так что если в векторе сейчас миллион элементов, и вставляется миллион-первый, то память будет выделена под два миллиона.

Flogger_d
()
Ответ на: комментарий от Flogger_d

> то память будет выделена под два миллиона.

И ещё примерно столько же будет замусорено предыдущими выделениями.

execve
()

но и это не все. Если ты сделаешь reserve() то в пределах его тебе гарантирована определенная скорость выполнения операций типа push_back и т.п.

Если же ты не сделал reserve() то у тебя могут быть непредвиденные и непредсказуемые задержки. В некоторых применениях это плохо.

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.