Оглавление:
Определение - Что означает Thunk?
Thunk в общем вычислительном контексте - это фрагмент низкоуровневого машинно-генерируемого кода, который реализует детали программной системы. Это одно из следующего:
- Часть кода, выполняющая отложенное вычисление
- Особенность реализации виртуальной таблицы функций
- Отображение машинных данных из одной системной формы в другую для проблем совместимости
Техопедия объясняет Thunk
Понятия thunk появились в начале 1961 года. Это вычисление, возвращающее значение аргумента при его выполнении. Вызов по необходимости заменяет thunk на возвращаемое значение после первого выполнения. Языки с поздним связыванием имеют поиск во время выполнения, основанный на вычислениях, выполненных thunk.
Нулевые функции (функции, которые не принимают аргументов) в функциональном программировании называются thunk. Thunks имитирует ленивую оценку и задерживает вычисление аргумента функции. Эти функции дополнительно заставляют thunks получать фактические значения. Thunk также может появляться естественным образом при реализации постоянных функций в программировании высокого порядка.
Компиляторы объектно-ориентированных языков, таких как C ++, генерируют функции, называемые thunks. Они оптимизируют вызовы виртуальных функций при наличии виртуального или множественного наследования.
Некоторые экземпляры перемещаемого кода используют локальные блоки управления для вызова функций библиотеки. Динамический вызов библиотеки в коде переходит к группам в таблице переходов, которая затем заменяется функциями, загружающими соответствующую библиотеку, или перемещается в подходящую точку в уже загруженной библиотеке. Таким образом, thunk в этой области вычисляет или возвращает ранее вычисленные и кэшированные значения. Thunks используются в программных системах виртуальной памяти для преобразования виртуальных адресов в физические. Создание 16-разрядной виртуальной машины DOS внутри 32-разрядной ОС называется thunking и обеспечивает обратную совместимость с приложениями, использующими старые системные вызовы.
Простые преобразователи используют преобразователи, переводящие вызовы из 32-разрядного кода в 16-разрядный код. Промежуточный код переводит адрес памяти между платформами. У Microsoft есть громадный слой под названием Win32s, который позволяет 32-разрядным приложениям Windows работать на 16-разрядных Windows. В 64-разрядной версии Windows также имеется слой WoW64, который позволяет использовать 32-разрядные приложения Windows.