Добро пожаловать в другие главы Давайте разберемся с Chrome V8
Большинство функций в V8 реализованы во встроенном файле. В этой статье мы поговорим об инициализации встроенных и общих встроенных типов.
1. Инициализация
Ниже приведен класс кода, который отвечает за управление всеми встроенными функциями.
Строка 7 определяет тип кода, определения встроенных модулей приведены в файле builtins-definitions.h. Роли кода и встроенной функции различны, но их инициализация выполняется единообразно с помощью void Isolate::Initialize(Isolate* isolate,const v8::Isolate::CreateParams& params). Ниже инициализация.
Во время инициализации будет выполнена 22-я строка кода и вызовет приведенную ниже функцию.
Основная задача инициализации — сгенерировать и скомпилировать встроенный код и смонтировать его на i::isolate. Мы подробно объясняем BuildWithCodeStubAssemblerCS.
Первый параметр используется для хранения встроенной функции; второй параметр — это индекс встроенного массива; третий параметр — указатель на функцию, указывающий на сгенерированную встроенную функцию; четвертый параметр — дескриптор вызова; последний параметр - это имя.
Строка 19 приведенного выше кода вызывает функцию генератора. Давайте возьмем TF_BUILTIN(RecordWrite, RecordWriteCodeStubAssembler) в качестве примера, чтобы объяснить:
TF_BUILTIN(RecordWrite, RecordWriteCodeStubAssembler) генерирует источник RecordWrite. TF_BUILTIN — это шаблон макроса. После развертывания вы можете увидеть, что его член CodeAssemblerState* находится в состоянии, которое сохраняет сгенерированный код. Сгенерированный исходный код RecordWrite будет сохранен в структуре кода.
Мы видим, что встроенные функции классифицируются по классу кода. Кстати, код — это объект кучи, которым управляет куча V8. мы объясним объект кучи V8 в будущем, на рисунке 1 показан стек вызовов.
В SetupBuiltinsInternal() мы видим, что AddBuiltin() добавляет код в i::isolate, как показано ниже.
Сгенерированные встроенные модули будут вставлены в массив builtins_[Builtins::builtin_count], и, наконец, массив будет смонтирован в i::isolate.
2. Встроенный
С функциональной точки зрения встроенные функции охватывают многие функции ядра, такие как зажигание, байт-код и функции спецификации ECMA. В BUILTIN_LIST есть подробные комментарии. Существует семь типов встроенных.
Давайте поговорим о BuildAdaptor.
14-я строка кода отвечает за создание BuildAdaptor и, наконец, вызывает следующий код:
На рис. 2 показан сгенерированный исходный код в формате char.
Вывод. Генерация каждой встроенной функции отличается, но метод анализа и отладки кода одинаков.
Хорошо, на этом мы закончили. Увидимся в следующий раз, берегите себя!
Мой блог cncyclops.com. Пожалуйста, свяжитесь со мной, если у вас есть какие-либо проблемы.
WeChat: qq9123013 Электронная почта: [email protected]