Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2012-04-11 14:02:23 ЛС | профиль | цитата
Tad писал(а):
то происходит резервирование новой памяти с достаточной длинной и "старый массив" копируется в новую память. Потом "старый массив" уничтожается.
Почти все правильно.
За исключением того, что НЕ ФАКТ, что копируется. Зависит от библиотек и API оси.
В случае виртуальной памяти, реаллокация может происходить и без копирования. Типа:
1) освобождается виртуальная область "старого" массива. А физическая память-то с данными никуда не девается - целехонькая остается.
2) находится в приложении непрерывная область большего размера.
3) мэпятся в начало этой области старые данные.
4) и все тип-топ

Такие фокусы кроме ОСИ никто не имеет право делать. И, вроде бы, в винде есть API по фамилии Realloc, если ты выделил себе память через создание хипа... Если мне не изменяет мой склероз...
НО, кажется, Дельфи не умничает с динамическими массивами и строками -- тупо копирует. А вот с WString - все может быть, там все через api оси делается.

Чего это еще дает.
В 32-х битном приложении у тебя всего 2Г виртуалки. Есть у тебя массив размером с 1Г -- и дулю с маком ты ему даже один байт прибавишь (в случае копирования)
А если по правильному (на что мы никак повлиять не можем) -- так без проблем

карма: 9

0