Т.е. елементы динамического массива будут гарантировано следовать друг за другом в памяти?
ДаПри изменении  размера дин массива происходит следующее:
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 КБ....