В Linux и многих других * nix системах вы обычно связываете стандартную библиотеку C динамически, по умолчанию это gcc
и clang
. Но вы все еще можете делать статические ссылки, если хотите. Это полностью зависит от вашей системы, среды, набора инструментов и личных настроек.
Также, когда мы включаем stdio.h, тогда все объявленные в нем функции добавляются во время выполнения или только те функции, которые используются?
Включение заголовка ничего не связывает. Стандартная библиотека C связывается автоматически компиляторами C, в противном случае вы получите неопределенные ошибки ссылок на этапе компоновки, если вы используете функции, которые объявлены, например, в. stdio.h
.
Тем не менее, при динамическом связывании вся библиотека загружается во время выполнения, когда это требуется динамическому компоновщику - нет способа загрузить отдельные функции. Преимущество динамического связывания заключается в том, что ОС требуется только одна копия этой библиотеки, независимо от того, сколько процессов ссылаются на нее. Библиотека может быть отображена в адресное пространство каждого процесса, в котором она нуждается. Это экономит оперативную память во время выполнения.