Вопрос хранения COBOL о РАБОЧЕМ ХРАНИЛИЩЕ, выделяемом из HEAP - PullRequest
0 голосов
/ 12 сентября 2018

Читая об улучшениях , сделанных с помощью COBOL V6.1 , я натолкнулся на эту информацию: «WORKING-STORAGE будет получен из хранилища HEAP во всех случаях, так что нет (почти) никаких исключенийкогда параметр STORAGE (xx) во время выполнения повлияет на WORKING-STORAGE. "

Как среда ХРАНЕНИЯ (XX) повлияет на РАБОТУ ХРАНЕНИЯ?

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

STORAGE - это опция времени выполнения языковой среды, которая

контролирует начальное содержимое хранилища при выделении и освобождении

(из «Настройка языковой среды» SA38-0685-01)

Дело в том, что вы можете определять разные значения для стека и кучи (или вы можете попросить инициализировать одно, а не другое), поэтому программа может вести себя по-разному при использовании неинициализированного (!)WS-переменные в зависимости от того, был ли получен WS из стека или кучи.

Таким образом, суть предложения, которое вы процитировали, заключается в том, что даже в случае различных STORAGE -подопций для стека и кучи поведениеCOBOL-программы будут более последовательными.

0 голосов
/ 13 сентября 2018

Начиная с COBOL v6.1, рабочее хранилище всегда выделяется из кучи, если только оно не находится в программе NORENT, где рабочее хранилище является частью исполняемого файла.(Схема размещения v5.x более сложна, и я не буду вдаваться в нее.) Это локальное хранилище, которое выделено в стеке.

Кроме того, опция времени выполнения STORAGE () не несет ответственности заобъем хранения.На самом деле у LE нет опции, которая контролирует объем памяти, который вы получаете, только приращения, в которых хранилище приобретается перед его распределением для удовлетворения запросов программы.

Я не считаю, что снижение производительностидля программ IS INITIAL, которые, по-видимому, связаны с настройками STORAGE (XX) в документе, указанном ранее, на самом деле связаны с настройкой STORAGE ().IS INITIAL просто повторно применяет предложения VALUE к тем элементам, которые имеют их, он не освобождает и не перераспределяет рабочее хранилище.

0 голосов
/ 12 сентября 2018

Вот справочный документ о STORAGE (XX) от IBM для COBOL 6.1.

См. Раздел «Хранение» в документе.Как это повлияет на вас с точки зрения производительности, описано в ссылке выше и предоставлено здесь для справки.

Соображения производительности при использовании STORAGE:

В среднем STORAGE (00,00, 00) был на 11% медленнее, чем STORAGE (NONE, NONE, NONE), с диапазоном эквивалента на 133% медленнее.Одна из программ RENT, вызывающая подпрограмму RENT с использованием IS INITIAL для оператора PROGRAM-ID с 40 МБ РАБОЧЕГО ХРАНИЛИЩА, работала на 28% медленнее.Обратите внимание, что при использовании приложений с интенсивным вызовом ухудшение может быть на 200% медленнее или более.

В среднем STORAGE (00, NONE, NONE) эквивалентен STORAGE (NONE, NONE, NONE).Одна программа RENT, вызывающая подпрограмму RENT с использованием IS INITIAL для оператора PROGRAM-ID с 40 МБ РАБОЧЕГО ХРАНИЛИЩА, работала на 5% медленнее.

В среднем STORAGE (NONE, 00, NONE) эквивалентно STORAGE(нет, нЕТ, нЕТ).Одна RENT-программа, вызывающая подпрограмму RENT с использованием IS INITIAL для оператора PROGRAM-ID с 40 МБ РАБОЧЕГО ХРАНИЛИЩА, работала на 9% медленнее.

Для программы с интенсивным вызовом STORAGE (NONE, NONE, 00) может ухудшитьсяболее 100%, в зависимости от количества звонков.

...