@RoflanDaniil

Что такое Си Runtime Library?

Не могу найти подробную информацию о том, что такое CRT и зачем она нужна.
Чтобы было проще и больше конкретики ограничимся Виндой И компилятором языка Си, что стоит в студии.
Как я понимаю из уже прочитанной информации CRT- библиотека, которая неявно компилируется линкуется вместе с почти любой программой. Нужна она для того чтобы поддерживать программу, во время выполнения.
Какая то прослойка системных вызовов. И я совершенно не понимаю зачем это нужно. Зачем нужна эта прослойка ?
Почему компилятор просто не преобразовывает функции программы вроде malloc и fopen в системные вызовы, зачем нужна какая то прослойка, которую еще и таскать с собой надо, которая еще и не динамическая.
Еще я слышал, что можно даже вроде как написать свою CRT для программы, если сильно захочется. Как это сделать и как это работает ?
Было бы интересно посмотреть на конкретную реализацию CRT что стоит в студии. Или в Gcc, где ее искать ?

Нужна ли подобная библиотека времени выполнения программам написанным на ASM ?
Например скомпилированных MASM.
  • Вопрос задан
  • 4528 просмотров
Решения вопроса 1
@pfemidi
Тут могло бы быть краткое описание меня
Ну в гугле в википедии что ли забанили? CRT/RTL.

Для ассемблера такого не надо, там всё делаешь руками, сам, под каждый процессор и под каждую OS. А язык C и является переносимым по большей части как раз из-за наличия CRT. malloc и fopen в языке C везде одинаковы, но всегда разные для конкретной OS .

Свою CRT написать можно, но это требуется довольно редко и для весьма конкретных и специфических случаев.

Если интересно посмотреть на конкретную реализацию CRT что стоит в студии, то она поставляется вместе со студией в виде исходных текстов, хоть обсмотрись.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
CRT - это реализация стандартной библиотеки Си/С++ для данного компилятора.
ОС обычно пишутся на Си и если в ОС нет реализации функций из стандарта Си, то они реализуются в стандартной библиотеке. Все классы из stdlib С++ реализованы в CRT.

CRT в VS может линковаться как статически так и динамически, в зависимости от опций компилятора. Линкуете статически - у вас распухает ваш исполняемый файл, динамически - пользователь должен предварительно поставить соответствующий vcredist (установку можно встроить в собственный инсталлятор). С точки зрения производительности оба варианта примерно одинаковы.

Вы можете не использовать стандартную библиотеку в принципе (отключив ее опциями компилятора) и работать на прямую с ОС, но это накладывает много ограничений и вы фактически остаетесь с кастрированным вариантом ЯП, т.к. например в С++ даже стандартный new/delete, на сколько я знаю, реализованы в стандартной библиотеке и прямого аналога в ОС нет. Обычно этим никто не заморачивается из-за возникающих проблем, решение которых заметно увеличит время реализации проекта, разве что вам необходимо сделать исполняемый файл минимального размера, максимально быстро стартующий и без зависимостей.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы