
Если кто навскидку помнит - подскажите пожалуйста.
Дано: в моей библиотеке для сериализации классов используются сценарии, строящиеся на основании rtti и заданного вручную списка полей.
Для работы с полями типа массив используется функция (указатель на поле, размер элемента массива). Она тупо трактует поле как array of byte, выполняет SetLength() используя <размер>*<размер элемента для данного типа>, затем подмухлёвывает счётчик элементов по отрицательному смещению.
Меня, однако, гложут сомнения, что это не совсем верно. Вот в связи с этим вопрос:
Массивы любых типов используют один и тот же аллокатор памяти, или возможны варианты?
Потому что если возможны варианты, и там для перераспределения памяти используется какая-то эвристика без проверки реального значения размера куска, то возможны неприятные ситуации, когда увеличение размера + запись в массив запортят память от того, что там, теоретически, должно было быть больше.
(борюсь с явным засиранием памяти в программе, но range и overflow checking уже ничего нового не дают)