Оптимизация в Project Options. Где почитать?
Должен же где-то быть хороший guide по этому делу?
Где можно почитать про оптимизацию программ в BCBuilder? Я имею ввиду оптимизацию через Project Options. Кроме хелпа, конечно. :)
Должен же где-то быть хороший guide по этому делу?
У меня есть, но все это в бумажном варианте.
У меня есть, но все это в бумажном варианте.
Я был бы очень благодарен, если бы вы написали, ЧТО нужно сделать в Project Options чтобы УМЕНЬШИТЬ размер EXE.
Особенно в секции
Project options / Linker / PE file options
Заранее спасибо.
P.S. Моя программа сейчас занимает 5 Кб, но я знаю, что можно уменьшить ее еще на 0,5 - 1 Кб.
Попробуй убрать из ЕХЕ отладочную инфу
У меня она есть, но в ручную все это сюда забивать нет времени. А сканера к сожалению под рукой нет.
А зачем тебе эти 0,5 кб?
Попробуй убрать из ЕХЕ отладочную инфу
Так ведь давно уже убрал! Станет ли нормальная програма весить 5 Кб? :) Я также убрал RTL, иначе прога весила бы 18 Кб. Я сделал _все_ что мог, осталось дело за оптимизацией.
Зачем это нужно? Из спортивного интереса. Я хочу доказать, что [color=red]на C++Builder можно создавать проги не хуже чем на Visual C++[/color]. Основным недостатком Билдера по сей день считается огромный вес скомпилированных программ. Поэтому мне ОЧЕНЬ нужно скинуть этот пятый килобайт!
Так ведь давно уже убрал! Станет ли нормальная програма весить 5 Кб? :) Я также убрал RTL, иначе прога весила бы 18 Кб. Я сделал _все_ что мог, осталось дело за оптимизацией.
Зачем это нужно? Из спортивного интереса. Я хочу доказать, что [color=red]на C++Builder можно создавать проги не хуже чем на Visual C++[/color]. Основным недостатком Билдера по сей день считается огромный вес скомпилированных программ. Поэтому мне ОЧЕНЬ нужно скинуть этот пятый килобайт!
Основной недостаток билдера - это VCL и уж слишком "сильная" визуализация процесса разработки, как следствие слабые знания разработчиков (не всех, конечно) об ОС.
А ещё приходилось читать где-то в Сети, что если заменить rtl dll на свою, содержащую только реально вызываемые функции, то можно и её подсократить, уменьшив тем самым размер дистрибутива.
А по большому счёту, есть ли смысл заниматься буквоедством в попытках создать самую короткую в мире программу, не делающую никакой полезной работы? Не нужно путать тёплое с мягким, а божий дар с яичницей. И что, у кого-нибудь винта нет, с пятидюймовых дискет работает?
Арбуз слаще огурца (как правило). Но лучше ли? А под водочку? Билдеровская продукция "весомее", но хуже ли? А лучше ли? Не факт.
А ещё приходилось читать где-то в Сети, что если заменить rtl dll на свою, содержащую только реально вызываемые функции, то можно и её подсократить, уменьшив тем самым размер дистрибутива.
А по большому счёту, есть ли смысл заниматься буквоедством в попытках создать самую короткую в мире программу, не делающую никакой полезной работы? Не нужно путать тёплое с мягким, а божий дар с яичницей. И что, у кого-нибудь винта нет, с пятидюймовых дискет работает?
Ну здесь ты несовсем прав.
1. Иногда просто требуется создать оптимальное по размеру приложение. Примеры? Пожалуйста:
- распространение ПО через интернет,
- создание загрузочных сменных носителей,
- создание "незаметных" (в большинстве случаев вредоносных) программ.
2. Обычно, чем больше приложение, тем медленнее оно ворочается в памяти, занимает бОльшую часть ресурсов.
3. По теории вероятности в бОльшем больше ошибок. :)
4. Ну и социально-психологический аспект - не солидно, когда "Hellow world" занимает пару сотен килобайт. :D
1. Иногда просто требуется создать оптимальное по размеру приложение. Примеры? Пожалуйста:
- распространение ПО через интернет,
- создание загрузочных сменных носителей,
- создание "незаметных" (в большинстве случаев вредоносных) программ.
2. Обычно, чем больше приложение, тем медленнее оно ворочается в памяти, занимает бОльшую часть ресурсов.
Совершенно верно.
Программа, которую я компилирую, называется "WinHider", она взята из статьи "Написание экстра-маленьких Win32 приложений на С++ от 1 Кб".
И я бы не сказал, что она "пустая" или "бесполезная". Я пользуюсь ею все время на работе. Например прямо сейчас. :)
Сама статья ориентирована на Visual C, и в Билдере описанный способ не работает. (Хотя она лежит на этом сайте под названием "Написание маленьких приложений на Borland C++ Builder") Я же узнал как ДЕЙСТВИТЕЛЬНО это делается на Билдере. На VC она занимает 4 Кб, на BCB пока 5 Кб. Хочется меньше.
Может кто-нибудь подскажет, как на Билдере сделать Align=512 bytes?
А что касается арбуза и огурца, то естественно, у каждого есть свои плюсы и минусы. Но если приходится выбрать что-то одно, то нужно смотреть по ситуации - где больше плюсов?
В BCB есть RAD-технологии. В VC их нет. На VC можно написать маленькую и быструю программу. Если я докажу что на BCB - тоже можно, будет 2:1 в пользу BCB.
Зачем вообще нужны маленькие программы? Чтобы они работали МОЛНИЕНОСНО и не жрали оперативку, будучи сервисами. Ведь есть же разница - 4 Кб или 1534 Кб (50 Кб программа + 1462 Кб cc3250mt.dll + 22 Кб borlndmm.dll). Первый вариант в 383 раза меньше!!!
И что, у кого-нибудь винта нет, с пятидюймовых дискет работает?
:D:D:D Я так начинал. Небыло винта, была одна системная 5,25" дискета с MS-DOS v. 2.11 на немецком языке (только command.com), с защитой от копирования. Дискета была 1983-го года производства, как и сам компьютер. Процессор - Intel-8086, оперативки 640 Кб (или 1024 - не помню уже). Кстати, в MS-DOS 2.0 впервые появилась поддержка ДИРЕКТОРИЙ. ...Да что это я... Ностальгия мучает... :D
Я понимаю, fellow, твой благородный пыл, ты защищаешь Билдер. Но ведь и у меня та же цель. Мы в одной команде. ;) Интерес, чисто спортивный, хочется утереть нос адептам Visual C, утверждающим что на Билдере это невозможно. Я даже саму программу оставил без изменений (разве что самый минимум, чтоб компилировалась), чтобы все было по-честному.
Насчет теплого и мягкого: Я согласен, что на первом месте - функциональность и удобство, а на втором - экономность.
Я и сам начинал не с крутых писюков, нам их показывали только из-за железной решётки. Была у меня своя машинка, и загрузочный сектор CP/M-80 знал я наизусть. И не было слаще удовольствия, чем раскурочить какую-либо программу и глянуть, как она устроена, или же накропать микро-код прямо в отладчике. О, благословенная молодость, хе-хе. Времена прошли, настали другие. Только и всего.
Более того, считаю, что попытки "доказать" какое-либо мнимое преимущество тёплого над мягким, или наоборот, да ещё довести счёт до 2:1 или ещё до какой-либо надуманной цифры, по своей сути бессмысленны. Интересны, да, но бессмысленны.
Но интересны. Это ты сам признал. :)
А что, по делу (оптимизация размера EXE) больше никто ничего не подскажет?
Но интересны. Это ты сам признал. :)
А что, по делу (оптимизация размера EXE) больше никто ничего не подскажет?
Я их UPX сжимаю, 1 000 000 => 250 000.
1) Compiler\Code optimizations
2) Advanced Compiler
Instruction set
Data alignment
3) А касаемо PE-опций Linker'a, то по-моему вполне можно безболезненно уменьшать Max stack & Max heap до тех пор, пока прога будет реально фунциклировать... думаю, что это будут довольно-таки маленькие значения. Думаю, что винда не использует пользовательский стек для системных вызовов (как ДОС).
Думаю, что не скажу ничего нового и особо умного
Приветствуются любые предложения. :)
Спасибо! :)
С PE-опциями я еще не ковырялся, т.к. у меня нет привычки лезть туда где я не разбираюсь. Теперь буду пробовать. :)
С PE-опциями я еще не ковырялся, т.к. у меня нет привычки лезть туда где я не разбираюсь. Теперь буду пробовать. :)
Не думаю, что размер стека и кучи как-то влияет на размер приложения.
Здесь важенее граница выравнивание секций.
Не думаю, что размер стека и кучи как-то влияет на размер приложения.
Здесь важенее граница выравнивание секций.
2Green:
Скорее всего, ты прав. Просто почему-то вспомнился asm, когда стек располагался в хвосте проги и надо было думать о том, чтобы он не начал затирать код. А ведь на дворе уже XXI век...:-)
десь важенее граница выравнивание секций.
Ну а как эту границу в Билдере изменить?
Это самый важный момент.