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

Тема в разделе ".NET", создана пользователем Solomon Kane, 5 сен 2011.

  1. Solomon Kane

    Solomon Kane Постоялец

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

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

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

    Irbis Создатель

    Регистр.:
    21 авг 2011
    Сообщения:
    12
    Симпатии:
    3
    вес заголовочного файла не равняется весу библиотеки.

    Добавлено через 2 минуты
    Проще говоря в заголовочном файле ( например "mylib.h" ) я объявляю одну функцию
    void foo(int bar);
    и размер файла меньше кибобайта
    а в файле ее описания mylib.cpp 1000 строк кода, и весит в итоге это добро больше.
     
    Solomon Kane нравится это.
  3. Solomon Kane

    Solomon Kane Постоялец

    Регистр.:
    26 авг 2009
    Сообщения:
    144
    Симпатии:
    9
    ОК, может, не так выразился. Если я что-то подключаю, вес увеличивается на всё, что подключаю, или только на то, что надо? Вот, например, подключение со всеми включениями имеет общий вес 30 килобайт, а нужная функция пусть будет 1 килобайт. На сколько увеличится вес на 1 килобайт или на 30 итогового исходника?
     
  4. jami

    jami Постоялец

    Регистр.:
    10 авг 2011
    Сообщения:
    114
    Симпатии:
    39
    Си - компилируемый язык, поэтому при компоновке транслируются все функции библиотеки, которая подключается через #include (т.е. статически). Т.е. вес увеличится на суммарный вес всех скомпилированных функций из подключенной статически либы.
    Динамически подключаемые библиотеки могут быть подключены на этапе исполнения, но опять же выборочно подключить функцию из них вряд ли получится, разве что шарить функции уже загруженной либы.
    В интерпретируемых языках (perl, python) можно задавать выборочную компиляцию для подкл. либ, в сях ЕМНИП - нет. Хотя можно вырезать ненужные функции из стандартной либы, и подключить только код с нужными, при условии что функции в либе независимы (чтобы не зарезать лишнего).
     
    Solomon Kane нравится это.
  5. Solomon Kane

    Solomon Kane Постоялец

    Регистр.:
    26 авг 2009
    Сообщения:
    144
    Симпатии:
    9
    Это печально :(. Но, думаю, вряд ли спецы, когда каждый байт на счету, берут и пихают в код всю библиотеку. Или так и делают? Может есть какой-то сайт, где есть реализации стандартных функций? Вообще, было бы неплохо узнать пару сайтов чисто по си, причём даже на английском. Так сказать, для получения опыта. Может, кто знает такие узкоспециализированные сайты?
     
  6. X-Cod

    X-Cod Создатель

    Регистр.:
    24 июл 2011
    Сообщения:
    11
    Симпатии:
    0
    На васме глянб-там есть такое,что тебе нужно было.
     
  7. psn

    psn

    Регистр.:
    30 апр 2009
    Сообщения:
    227
    Симпатии:
    30
    в названии темы c#, а спрашиваете по с++ (совершенно разные концепции)
     
  8. gothmog

    gothmog Постоялец

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