Буквальный пул
Эта статья нуждается в дополнительных цитатах для проверки . ( февраль 2013 г. ) |
В информатике , и особенно в компиляторов и ассемблеров проектировании , пул литералов — это таблица поиска, используемая для хранения литералов во время сборки и выполнения .
Множественные (локальные) пулы литералов обычно используются только для компьютерных архитектур , в которых отсутствуют инструкции ветвления для длинных переходов или имеется набор инструкций, оптимизированных для более коротких переходов. Примеры таких архитектур включают IBM System/360 и ее преемники, в которых был ряд инструкций, требующих 12-битного смещения адреса. В этом случае компилятор будет создавать буквальную таблицу на каждой странице размером 4 КБ; любые ветки, чья цель находилась на расстоянии менее 4 КБ, могли быть удалены немедленно; более длинные ветки требовали поиска адреса через таблицу литералов. Записи в пуле литералов помещаются в объектов таблицу перемещения во время сборки, а затем разрешаются во время редактирования ссылки .
Архитектура ARM также использует несколько локальных пулов. [1] как и AArch64 , 64-битное расширение исходного ARM. [2]
Другая архитектура, использующая несколько локальных пулов, — это C-SKY, 32-битная архитектура, предназначенная для встроенных SoC . [3] [4]
В некотором смысле пул литералов напоминает TOC или глобальную таблицу смещений (GOT), за исключением того, что реализация значительно проще и на объект может быть несколько таблиц литералов.
Вероятно, наиболее распространенным типом пула литералов являются пулы литералов, используемые LDR Rd,=const
псевдоинструкция на языке ассемблера ARM [5] [6]
и аналогичные инструкции на языке ассемблера IBM System/360, [7]
которые компилируются в LOAD с ПК относительно режимом адресации и константой, хранящейся в пуле литералов.
В архитектуре IBM S/390 и zSeries ассемблер GNU «as» (который вызывается в процессе сборки gcc ) будет использовать регистр общего назначения R13 для хранения указателя на пул литералов. [8] [9]
Часто какое-то конкретное постоянное значение используется в программе несколько раз. Многие компоновщики по умолчанию сохраняют каждую уникальную константу один раз в одном объединенном пуле литералов; это увеличивает размер кода. [10]
Виртуальная машина Java имеет «пул строковых литералов» и « пул констант класса ». [11]
Ссылки
[ редактировать ]- ^ «Использование as, раздел 9.4 (Функции, зависящие от ARM)» .
- ^ «Использование as, раздел 9.1 (Зависимые функции AArch64)» .
- ^ «Использование как, раздел 9.10.1 (Зависимые функции C-SKY: Параметры)» .
- ^ Ларабель, Майкл. «32-битные процессоры C-SKY нацелены на начальную поддержку в Linux 4.20~5.0» . Архивировано из оригинала 22 августа 2022 года . Проверено 22 августа 2022 г.
- ^ «Написание языка ассемблера ARM > Пулы литералов» . Архивировано из оригинала 19 августа 2022 года.
- ^ «Руководство пользователя ассемблера IAR для ядер ARM Limited (AARM-12)» (PDF) . Архивировано (PDF) из оригинала 19 января 2022 года . Проверено 22 августа 2022 г. Архивировано 22 августа 2022 года на archive.today.
- ^ «Ассемблер высокого уровня для z/OS, z/VM и z/VSE V1R6 (HLASM V1R6). Справочник по языку: пул букв» . ИБМ . Архивировано из оригинала 19 августа 2022 года.
- ^ Гейзельхарт, Грегори; Гран, Андреа; Хандоко, Франс; Хундертмарк, Йорг; Кшимовский, Альберт; Помар, Элиут (июль 2002 г.). Linux на IBM zSeries и S/390: Разработка приложений (PDF) . Красные книги IBM. ИБМ . Архивировано (PDF) из оригинала 22 июля 2021 года. Архивировано 19 августа 2022 года на archive.today.
- ^ «Использование как (раздел 9.41.3.8)» . Архивировано из оригинала 19 августа 2022 года.
- ^ Уильям фон Хаген. «Полное руководство по GCC» .
- ^ Джеки Баркер. «Начальные объекты Java: от концепций к коду»: «пул букв» .