(также известный как ) — набор стартовых подпрограмм, принудительно линкуемых в программу, написанную на Си. Crt0 выполняет инициализирующую работу, необходимую перед вызовом основной функции.

Типы и использование Crt0 обычно принимает форму объектного файла с именем , часто написанного на языке ассемблера, который автоматически включается линковщиком в каждый скомпонованный им исполняемый файл.

crt0 содержит основные части библиотеки среды выполнения. Работа, которую он выполняет, зависит от компилятора, операционной системы и реализации стандартной библиотеки. Кроме работы по инициализации, которая требуется средой и набором инструментов, crt0 может выполнять и дополнительные операции, определенные программистом, такие как исполнение глобальных конструкторов C++ и функций языка Си, имеющие аттрибут .

«crt» означает «C runtime» («время выполнения Си»), а ноль подразумевает «самое начало». Однако, когда программы компилируются с помощью GCC, он также используется в отличных от Си языках. Альтернативные версии доступны для специальных сценариев использования; например, чтобы включить профилирование с помощью gprof, программы должны быть скомпилированы с .

Пример crt0.s Этот пример предназначен только для Linux x86-64 с синтаксисом AT&T без актуальной среды выполнения Си.

.text .globl _start

_start: # _start — точка входа, известная компоновщику xor %ebp, %ebp # эффективно RBP := 0, отмечаем конец стековых кадров mov (%rsp), %edi # получить argc из стека (неявно расширенный до 64 бит) lea 8(%rsp), %rsi # взять адрес argv из стека lea 16(%rsp,%rdi,8), %rdx # взять адрес envp из стека xor %eax, %eax # по ABI и совместимость с icc call main # %edi, %rsi, %rdx — три аргумента (из которых первые два являются стандартными для языка Си) для main mov %eax, %edi # перенести возврат main в первый аргумент _exit xor %eax, %eax # по ABI и совместимость с icc call _exit # завершить программу

См. также Точка входа Среда выполнения

Примечания

Категория:Языки программирования семейства Си Категория:Стандартная библиотека Си