Объем памяти программы для разных интерпретаторов/компиляторов

StackOverflow https://stackoverflow.com/questions/4974410

  •  12-11-2019
  •  | 
  •  

Вопрос

Вот отрывок из Запись в Википедии о языке программирования K:

Небольшой размер интерпретатора и компактный синтаксис языка позволяют K-приложениям полностью помещаться в кэше первого уровня процессора.

Что именно делает K-программы такими маленькими?Когда человек использует ' оператор в K, map на скомпилированном функциональном языке, таком как Haskell или его эквиваленте. for в скомпилированном императивном языке, таком как C, я не могу себе представить, чтобы компилятор генерировал радикально другой ассемблерный код или то, что происходит во внутренних устройствах интерпретатора, будет сильно отличаться от for петля.Есть ли в K что-то особенное, что делает его среду выполнения и программы такими маленькими?

Есть похожее вопрос на ТАК, но ответы там в принципе ничего не проясняют.

Это было полезно?

Решение

Существуют способы создания очень компактного кода.Например, http://en.wikipedia.org/wiki/Threaded_code Форта и ему подобных.Вполне вероятно, что K скомпилирован в какую-то его форму.

Другие советы

Я не автор приведенного выше утверждения в Википедии, я просто человек, который широко использует K.

Что касается кода, K не разворачивает циклы и не вносит другие изменения в структуру программы, которые могли бы увеличить ее размер сверх того, что вы ожидаете.Сам исполняемый интерпретатор крошечный.И программы, как правило, небольшие (хотя и не обязательно).Это не выполнение каких-то конкретных инструкций по маппингу и т.п.это повышает вероятность того, что сам код выполнит все в пределах кеша.

Программы K имеют тенденцию быть небольшими, потому что они представляют собой небольшой, компактный байт-код в памяти, а их синтаксис имеет тенденцию давать очень небольшие объемы кода для данной операции.

Сравните эту Java-программу:

int r=0;
for(int i=0; i<100; i++) {
  r+=i;
}

Против этой программы K, чтобы получить тот же результат:

+/!100

Объем выполняемого кода аналогичен, но объем памяти, требуемый программе (гораздо меньше ввода!), намного меньше.K отлично подходит для тех, кто страдает от повторяющихся стрессовых травм.

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

Но это всего лишь тенденции и лучшие практики языка в сочетании с самим исполняемым файлом K.Если вы соедините большое количество дополнительного кода, множество функций в особых случаях и рандомизируете индексы перед доступом к данным, ваша программа будет столь же недружелюбна к кешу, как и следовало ожидать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top