Т.е. елементы динамического массива будут гарантировано следовать друг за другом в памяти?
ДаПри изменении размера дин массива происходит следующее:
1. Выделяется новая память (нужного размера) ; размер = запрошенный размер + (как минимум 8 байт) 4 байта для указателя ссылок и 4 байта для указания длины массива.
1.1 На 64 битных эти поля должны быть по 8 байт. Типа стандартный sizeof(int) на данной платформе.
2. Копирование старго в новый
3. Изменения указателей на новый
4. Удаление старго.
Вообще дин массив в памяти это:
[кол-во ссылок на массив(int)][длина массива(int)][данные (первый элемент массива.)(размер элемента)][второй элемент массива] и.т.д
Переменная массива указатель на первый элемент массива...
Ммм не хорошо написал, лучше так:
Пусть: sE - размер одного элемента, sE := SizeOf(элемента);
[ Адрес ][ данные ]
[ 0x0 ][ кол-во ссылок ]
[ 0x4 ][ значение High ]
[ 0x8 ][ Первый элемент массива ] <--- именно сюда указывает переменная массива.
[ 0x8+ sE ][ Второй элемент ]
[ 0x8+ 2*sE ][ Третий элемент ]
Более подробно можно прочитать скажем тут:
Работа с указателями (очень советую, хорошая статья)
Там есть раздел про дин массивы.
PS. Отличие дин массивов в Free Pascal от Delphi, в том, что FPC хранит не значение Length, а значение High (High = Length -1), это необходимо знать, если будете передовать указатель на массив в процедуру на другом языке или работать на уровне ассемблера.
PS. #2 Почему blockwrite ? а не просто запись в файл (Write), потом вроде у blockwrite ограничение на 64 КБ....