Существует по сути два подхода к динамическим массивам. Одним из них является Malloc -inment prick и realloc -ing с вдвое большей емкостью по мере роста массива. В какой -то момент realloc начнет выделять новый массив и копировать содержимое старого и освободить старое. Это, безусловно, самый распространенный подход, но по мере того, как массив становится очень большим, перераспределение и копия могут ввести значительную задержку.
С другой стороны, можно инициализировать массив, оставив огромное количество виртуального адресного пространства (с виртуальным , MMAP , и т. Д. В зависимости от платформы) даже на все размеры. Затем по мере роста размера массива можно просто совершить память на лету. Это не только избегает копирования, но и любые указатели на массив также не будут недействительными. Однако я не видел, чтобы это использовалось в дикой природе ... < /p>
Итак, мой вопрос в том, почему? Почему первый подход почти всегда используется, а второй - так редко? У меня не хватает значительных недостатков второго подхода? Или я даже недооцениваю частоту использования второго подхода в дикой природе?
Подробнее здесь: https://stackoverflow.com/questions/797 ... rve-commit
Динамический массив: двойной размер realloc vs Big Reserve + Commit ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Динамический массив: Double Size Realloc vs Big Reserve + Commit [закрыто]
Anonymous » » в форуме C++ - 0 Ответы
- 0 Просмотры
-
Последнее сообщение Anonymous
-