Состоялась лекция, посвящённая различным аспектам спецификации состояния памяти в ACSL. Были рассмотрены вопросы:
- (напоминание) спецификация доступности памяти по указателям;
- как описывать в спецификации требования на возможность разыменовать указатель (функция
\valid
); - возможность адресации области памяти (напр., работа с указателем как с массивом);
- в выражении
\valid
используются указатели, в отличие от спецификации разрешённое на изменение памяти (вassigns
иloop assigns
); - как использовать невалидный указатель в спецификациях (специальное значение
\null
);
- как описывать в спецификации требования на возможность разыменовать указатель (функция
- модель памяти ACSL;
- частичный порядок над указателями в ACSL;
- несравнимость указателей, полученных разными выделениями памяти;
- предположение о непересекаемости указателей по умолчанию;
- явная спецификация непересекаемости указателей (функция
\separated
); - средства работы с областями памяти (фукнции
\offset_min
,\offset_max
,\base_addr
)
- аргумент состояния памяти в логических функциях:
- для именованных предикатов и логических функций, использующих память по указателям, состояние памяти должно передаваться явно параметром-меткой;
- если функция определена над значениями самих указателей, метка памяти не требуется;
- при использовании функции с единственным параметром-меткой, эта метка может быть поставлена автоматически;
- встроенная функция
\valid
тоже имеет параметр-метку, которая может быть использована явно (если это требуется); - именованные предикаты и логические функции могут иметь несколько параметров, описывающих состояние памяти;
- какие свойства можно выражать при помощи предикатов и функций с несколькими параметрами-метками;
- как объявить предикат или функцию с параметрами-метками и как их использовать;
- аксиомы и леммы с метками памяти;
- спецификация выделения/освобождения памяти;
- если не специфицировано выделение/освобождение памяти, то разрешается любое поведение в этом аспекте;
- конструкции
allocates
иfrees
для явной спецификации разрешённых множеств; - места, в которых определены выражения в конструкциях
allocates
иfrees
(т.е. значение метокHere
); - как специфицировать запрет на выделение/освобождение памяти.