[C#] Увеличивается размер файла

Solomon Kane

Постоялец
Регистрация
26 Авг 2009
Сообщения
144
Реакции
9
Для многих возможностей си надо использовать заголовочные файлы из стандартной и не только библиотеки. Например, stdio.h, кажись, весит 12 килобайт. Вопрос такой - если я включаю в код, например, printf(), конечный файл увеличивается в размере на 12 килобайт (вся библиотека) или только на тот код, что занимает реализация printf()?

Понятно, что проще всего вырвать реализацию из библиотеки и вставить в исходник, чтобы проверить, но я пока до такого не дорос.

Спасибо за ответы!
 
вес заголовочного файла не равняется весу библиотеки.

Добавлено через 2 минуты
Проще говоря в заголовочном файле ( например "mylib.h" ) я объявляю одну функцию
void foo(int bar);
и размер файла меньше кибобайта
а в файле ее описания mylib.cpp 1000 строк кода, и весит в итоге это добро больше.
 
ОК, может, не так выразился. Если я что-то подключаю, вес увеличивается на всё, что подключаю, или только на то, что надо? Вот, например, подключение со всеми включениями имеет общий вес 30 килобайт, а нужная функция пусть будет 1 килобайт. На сколько увеличится вес на 1 килобайт или на 30 итогового исходника?
 
Си - компилируемый язык, поэтому при компоновке транслируются все функции библиотеки, которая подключается через #include (т.е. статически). Т.е. вес увеличится на суммарный вес всех скомпилированных функций из подключенной статически либы.
Динамически подключаемые библиотеки могут быть подключены на этапе исполнения, но опять же выборочно подключить функцию из них вряд ли получится, разве что шарить функции уже загруженной либы.
В интерпретируемых языках (perl, python) можно задавать выборочную компиляцию для подкл. либ, в сях ЕМНИП - нет. Хотя можно вырезать ненужные функции из стандартной либы, и подключить только код с нужными, при условии что функции в либе независимы (чтобы не зарезать лишнего).
 
Это печально :(. Но, думаю, вряд ли спецы, когда каждый байт на счету, берут и пихают в код всю библиотеку. Или так и делают? Может есть какой-то сайт, где есть реализации стандартных функций? Вообще, было бы неплохо узнать пару сайтов чисто по си, причём даже на английском. Так сказать, для получения опыта. Может, кто знает такие узкоспециализированные сайты?
 
На васме глянб-там есть такое,что тебе нужно было.
 
Для многих возможностей си надо использовать заголовочные файлы из стандартной и не только библиотеки. Например, stdio.h, кажись, весит 12 килобайт. Вопрос такой - если я включаю в код, например, printf(), конечный файл увеличивается в размере на 12 килобайт (вся библиотека) или только на тот код, что занимает реализация printf()?

Понятно, что проще всего вырвать реализацию из библиотеки и вставить в исходник, чтобы проверить, но я пока до такого не дорос.

Спасибо за ответы!

в названии темы c#, а спрашиваете по с++ (совершенно разные концепции)
 
Функции из crt можно динамически прилинковать к проекту. Как сделать это на Си, я не знаю, спросите на Васме например. Я лично пишу на Масм, вообще, если вес программы принципиален (малварь и т.д.), стоит переходить на ассемблер. Или писать на Си без crt (учить winapi, в нем есть замена всем сишным функциям, не так удобно, но зато размер небольшой).
 
Назад
Сверху