TURBO PASCAL |
Новости
|
Коллекции и управление памятью
Поскольку элементы коллекций располагаются в динамической памяти, при их использовании особенно важными становятся вопросы контроля за состоянием кучи. Любая коллекция не может расти до бесконечности: с одной стороны, ее размеры определяются доступной памятью и размером элементов, с другой стороны - общее количество элементов коллекции не может превышать 65520 div SizeOf (Pointer) = 16380 Иными словами, все указатели на элементы коллекции должны располагаться в пределах одного сегмента. Величина 16380 задается значением глобальной константы MaxCollectionSize, объявленной в интерфейсной части модуля Objects. Таким образом, при наполнении коллекции необходимо следить за общим количеством элементов (переменная TCollection.Couni), которое не может превысить значение, задаваемое константой MaxCollectionSize. Кстати, если при обращении к методу TCollection.Init начальное значение N0 коллекции указано слишком большим, оно заменяется на MaxCollectionSize. Элементы коллекции обычно размещаются в куче, поэтому перед размещением очередного элемента следует проверить доступную память (возвращается стандартной функцией MaxAvail). В ходе расширения коллекции может оказаться, что динамической памяти не хватает для размещения нового массива указателей (напомню, что расширение коллекции заключается в создании нового массива из NO + k*ND указателей, где N0 - начальная длина, ND - шаг наращивания коллекции, k= 1,2, ...; после этого в новый массив копируется старый массив указателей, а место, выделенное под размещение старого массива, возвращается в кучу). Если обнаружена нехватка памяти для расширения коллекции или если при обращении к методу TCollection.At указан индекс, превышающий размер коллекции, вызывается метод TCollection.Error. По умолчанию этот метод завершает выполнение программы с кодом 212 ошибки периода исполнения. Вы можете перекрыть TCollection.Error, чтобы нужным образом отреагировать на возникшую ситуацию. В этом случае следует учесть, что заголовок TCollection.Error в Turbo Vision имеет следующий вид: Procedure TCollection.Error (Code, Info': Integer); Параметр Code в стандартных ситуациях соответствует следующим константам:
|
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |