В вики есть примеры про malloc() и new. В рантайм-библиотеке хранятся платформо-зависимые функции для работы с операционной системой, с ее функциями, которые работают с аппаратурой?
Отдельные функции. Дело в том, что STL — это куча шаблонов, и их надо как-то расшаблонивать. Отдельные, наиболее важные специализации (например, std::string и wstring), а также точные специализации каких-нибудь функций (ostream << int) могут храниться в рантайм-библиотеке, но в общем нет.
Олег Цилюрик: nevro: Шаблонные функции не хранятся, а каждый раз при компиляции расшаблониваются и компилируются в нужной специализации. Если вдруг у вас есть std::string где-то, попробуйте пройтись по проге отладчиком — он даже зайдёт в хедеры STL (другой вопрос, что ничего там не поймёшь).
Всё, что не шаблонное (int func(x)) или полностью специализировано (template<> int Type func(x)) — в общем, «по-хорошему» исходник должен быть в CPP — разумеется, хранится. Также стандартная библиотека может — ключевое слово может — специализировать некоторые шаблонные функции, просто чтобы хранить их в RTL. Например, некоторые функции std::string.
Mercury13:
При чём здесь шаблонные ... а заодно и все прочие функции? ;-)
Ужос, когда задают абсолютно безграмотные вопросы, которые студенты должны знать наизусть после 1-го семестра, а школьники искать где этот семестр прослушать!
malloc() - функция, а new - оператор языка, malloc() - выделение памяти в хипе, а new - вызов конструктора ... malloc() - библиотечный вызов, и вызовы бывают (man man) библиотечные и системные ... но не "рантайм", не "платформо-зависимые для работы с операционной системой", и не "функции, которые работают с аппаратурой".
Это не каша в голове ... - это просто какая-то фантастика!
Что такое «внутренние функции для обслуживания точки входа»? Под DOS это могло быть перехватить пару прерываний наподобие Ctrl+Break. Получить командную строку и преобразовать её в argc и argv. В консольной программе — создать консоль, и т.д. (мало кто знает, что GUI-программы Windows тоже имеют потоки ввода, вывода и ошибок — просто консольного окна у них нет). Перевести библиотеку в однопоточный режим… В общем, они выполняются до main() и после него.
Олег Цилюрик: Ну да, malloc — библиотечный вызов и эта функция точно в RTL. Но new — это также вызов некой функции (выделение памяти), которая обязана быть где-то в RTL, а потом — вызов конструктора, он-то уж где попадётся.
Олег Цилюрик: Шаблонных функций просто не могло быть в RTL, потому что они должны храниться в полном исходнике в хедерном файле, чтобы компилятор мог их специализировать.
Всё, что либо не шаблонное, либо до конца специализировано — есть там, разумеется.
И вообще, RTL — обычная себе библиотека, только автоматически подключается к любой программе.
Mercury13: Спасибо, вроде смысл рантайм-библиотеки понял - раньше думал, что все копируется в .cpp-файл, как заголовочные .h-файлы. А они вместо этого уже скомпилированы в объектный код и собраны в библиотеки.