Каким образом функции RESIZE и DEALLOCATE влияют на производительность процессора

У меня есть 2 варианта одного и того же кода ALGOL - это замена ONE-ONE

  1. Что использует - ИЗМЕНИТЬ РАЗМЕР (ВОЗВРАТИТЬ LIBARAY POOL)
  2. Что использует - DEALLOCATE (ДЛЯ ВОЗВРАТА ИТ-СИСТЕМЫ)

Тот, который DEALLOCATE потребляет больше процессорного времени и увеличивает% использования процессора.

Почему DEALLOCATE потребляет больше ЦП?

1 ответ

Burroughs/Unisys/A-Series, я полагаю?

Прошло несколько лет с тех пор, как я использовал одну из этих систем, но я полагаю, что она не сильно изменилась.

RESIZE изменяет размер вашего объекта (скажем, это массив для упрощения жизни). При создании исходного массива он был извлечен из пула ASD. Есть несколько бассейнов разного размера. Фактическая память, выделенная вашей программе, может быть не точного размера, который вы запрашивали, хотя ваш дескриптор будет "подправлен" так, чтобы он выглядел именно таким (поэтому различные внутренние вызовы работают правильно). Если вы ИЗМЕНИТЕ РАЗМЕР в пределах фактического размера этого элемента памяти, тогда только это лечение должно быть обновлено. Быстро, легко.

В противном случае фактически вызывается процедура MCP EXPANDAROW вместо RESIZEANDDEALLOCATE. Обычно, но не всегда, это позволяет найти дополнительную память без необходимости возвращать исходную память в пулы ASD.

Во втором случае, DEALLOCATE, процедура MCP RESIZEANDDEALLOCATE действительно вызывается, память возвращается в пулы ASD, удаляются вектора допинга, очищается память, обновляются слова связи памяти и обновляются пулы ASD. Ваша программа платит за все это (точно так же, как она платила за первоначальное распределение).

В вашем вопросе недостаточно информации, чтобы ответить на вопрос о смягчении последствий. Может быть, нет? Почему вы все равно звоните RESIZE/DEALLOCATE? Обычно это уже происходит на BLOCKEXIT.

Другие вопросы по тегам