8.7. Memavail и Maxavail

На верх  Назад  Вперёд

Старые функции Turbo Pascal MemAvail и MaxAvail больше не доступны в Free Pascal, начиная с версии 2.0. Причина этой несовместимости описана ниже. В современных операционных системах (DOS-расширитель GO32V2 попадает под определение «современная», потому что он может использовать страничную память и запускаться в многозадачной среде) идеи о «Свободной памяти» не являются допустимыми для приложения.

Причины заключаются в следующем:

1.В одном такте процессора после запроса приложением у ОС, сколько памяти свободно, другое приложение может занять всю память.

2.Не понятно, что означает «свободная память»: включая файл подкачки, кэш-память диска (на современных ОС кэш-память диска может увеличиваться и уменьшаться), включая память, выделенную для других приложений, но которая может быть освобождена и т.п.

Таким образом, программы, использующие функции MemAvail и MaxAvail, должны быть переписаны так, чтобы больше не использовать эти функции, потому что это не имеет смысла на современных операционных системах. Имеется три возможности:

1.Использовать исключения, чтобы поймать ошибки нехватки памяти.

2.Установить глобальную переменную ReturnNilIfGrowHeapFails в True и проверить после этого каждое выделение памяти, где указатель отличается от Nil.

3.Не «париться» по этому поводу и объявить функцию для «чайников» с именем MaxAvail, которая всегда будет возвращать High(LongInt) (или какую-то другую константу).