Динамическая и статическая компиляция под Linux/Unix/Solaris и т.п
Какая программа будет работать быстрее?
Ведь по идее, если размер программы увеличился с 60Kb до 160Kb то читать с винта сильно дольше ее не будут, а вот при динамической компиляции нужно все библиотеки подгрузить и т.п.
Да и забыть можно про "libstc++.so.5 not found"
Вот такой фундаментальный вопрос :)
Цитата:
Originally posted by mike
Ведь по идее, если размер программы увеличился с 60Kb до 160Kb то читать с винта сильно дольше ее не будут, а вот при динамической компиляции нужно все библиотеки подгрузить и т.п.
Ведь по идее, если размер программы увеличился с 60Kb до 160Kb то читать с винта сильно дольше ее не будут, а вот при динамической компиляции нужно все библиотеки подгрузить и т.п.
А если libstc++.so.5 уже загружен для другой программы, разве его код не будет шариться?
Цитата:
Originally posted by smartsoft
А если libstc++.so.5 уже загружен для другой программы, разве его код не будет шариться?
А если libstc++.so.5 уже загружен для другой программы, разве его код не будет шариться?
Я бы тоже так подумал, но эта библиотека содержит не thread safe код. Таким образом, она должна грузится отдельно или форкаться. И то и то долго.
Цитата: mike
...но эта библиотека содержит не thread safe код. Таким образом, она должна грузится отдельно или форкаться.
Вовсе нет. Фриман прав, код общих библиотек хранится в ОЗУ только в одном экземпляре.
правда ПОКА какой-нибудь из процессов не юзанет оттуда ф-ю,
которая будет писать в глобальное пространство библиотеки.
А до этого момента все будет красиво.
На самом деле фундаментальный вопрос...
Но в итоге, я считаю - вопрос вкуса и интуиции.
Я в таких случаях рассуждаю так - если это консольная тулза или
что-то в этом роде, т.е. запустил у себя на машине, че-то она
сделала и все. Тогда динамическая линковка.
Если это демон, причем критичный к времени исполнения, ну, например,
что-то сродни веб-серверу... - то это статика, кончено. Так оптимальнее.
Хотя опять же - рассуждения и только.
Если надо докопаться до сути, то бурум конкретнуй вещь и профилируем
в обоих случаях, ну а там уже будет пища для рассуждений.
Цитата: kerdan
код-то не thread safe, но юзаться он будет в ОДНОМ экземпляре,
правда ПОКА какой-нибудь из процессов не юзанет оттуда ф-ю,
которая будет писать в глобальное пространство библиотеки.
А до этого момента все будет красиво.
правда ПОКА какой-нибудь из процессов не юзанет оттуда ф-ю,
которая будет писать в глобальное пространство библиотеки.
А до этого момента все будет красиво.
?? Какое еще "глобальное пространство библиотеки"?? Библиотека - не процесс, а разделяемый код. В ней все адреса относительные, поэтому она просто проецируется операционной системой в адресное пространство процесса, а физический адрес вычисляется используя смещение, свое для каждого процесса. Это реализовано на уровне процессора, используя скрытые от пользователя регистры.
Угу. По-моему, некто перепутал понятия сервера и библиотеки и начал решать несуществующую проблему.