<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1082134</guid>
        <pubDate>Wed, 19 Apr 2006 09:33:24 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1082134</link>
        <description><![CDATA[Leprecon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=139119&view=findpost&p=1081979'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>vito333 &#064; <time class="tag-quote__quoted-time" datetime="2006-04-19T11:55:50+04:00">19.04.06, 07:55</time></span><div class='quote '>и чего за &quot;Разрешить&quot; такое? </div></div>Любое сообщение или тема в этом разделе появляются на всеобщее обозрение только после того, как это разрешит модератор.]]></description>
        <author>Leprecon</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1081979</guid>
        <pubDate>Wed, 19 Apr 2006 07:55:50 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1081979</link>
        <description><![CDATA[vito333: <strong class='tag-b'>trainer</strong><br>
я предлагаю оставить в топике один маленький постец относительно Delphi (уберу остальные), а в нём напишу что-то вроде &quot;всё про минимизацию программ на Delphi - в аттаче&quot;, прицеплю архив, и пусть пост останется тут, так как про Delphi я не буду развивать тему где либо ещё, и если не будет тут - не будет нигде.<br>
Ок?<br>
<br>
и чего за &quot;Разрешить&quot; такое?]]></description>
        <author>vito333</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1081807</guid>
        <pubDate>Wed, 19 Apr 2006 05:04:02 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1081807</link>
        <description><![CDATA[trainer: Т.е. ты предлагаешь модераторам удалить/переместить на свое усмотрение? Я и так замучался нажимать кнопку &quot;Разрешить&quot; :)]]></description>
        <author>trainer</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1081720</guid>
        <pubDate>Tue, 18 Apr 2006 21:25:58 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1081720</link>
        <description><![CDATA[vito333: хм, и точно, чего-то я протупил. Не буду про Delphi ни писать, ни переносить.]]></description>
        <author>vito333</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1081291</guid>
        <pubDate>Tue, 18 Apr 2006 14:03:32 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1081291</link>
        <description><![CDATA[trainer: <strong class='tag-b'>vito333</strong>, ты давай определяйся, как будешь выделять отсюда про Delphi и куда это переносить.]]></description>
        <author>trainer</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1080244</guid>
        <pubDate>Mon, 17 Apr 2006 15:34:06 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1080244</link>
        <description><![CDATA[Hryak: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=139119&view=findpost&p=1079997'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>vito333 &#064; <time class="tag-quote__quoted-time" datetime="2006-04-17T12:53:21+00:00">17.04.06, 12:53</time></span><div class='quote '>теперь немного о Delphi<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
<strong class='tag-b'>Выжимаем из Delphi все возможное</strong></div></div></div></div><br>
А не пойти ли Вам из C++-фака куда-нибудь подальше, например в <a class='tag-url' href='http://forum.sources.ru/index.php?showforum=9' target='_blank'>Delphi</a> и иже с ними?  &gt;:(]]></description>
        <author>Hryak</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1080048</guid>
        <pubDate>Mon, 17 Apr 2006 13:30:36 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1080048</link>
        <description><![CDATA[vito333: принципы оптимизации размера программ для Delhpi  и Borland C++ весьма похожи, но вот статья и пример специально для BCB<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
<strong class='tag-b'>Сборка очень маленьких программ в Borland C++ Builder (06-май-2003) </strong><br>
<br>
Здесь описан порядок сборки программ или DLL не нуждающихся ни в VCL ни в RTL.<br>
</div></div>]]></description>
        <author>vito333</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1079997</guid>
        <pubDate>Mon, 17 Apr 2006 12:53:21 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1079997</link>
        <description><![CDATA[vito333: теперь немного о Delphi<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
<strong class='tag-b'>Выжимаем из Delphi все возможное</strong><br>
<br>
Ты пишешь на дельфях и чувствуешь себя аутсайдером? Тебе нечем ответить в бесконечных hollywar&#39;ах? Теперь ты точно будешь знать: дельфи стоит того, чтобы его любить. И не только из-за простоты этого языка. Очень маленькие и очень быстрые программы на дельфи - это возможно&#33; Ты расскажешь об этом всем сомневающимся. И с мнением, что дельфи - язык для ламеров, будет покончено&#33;<br>
<br>
Многие системные программисты привыкли считать Delphi полным отстоем. Свое мнение они аргументируют тем, что компилятор генерирует слишком медленный и большой код, а средний размер пустой формы с кнопкой - 400 килобайт. Впрочем, иногда никаких аргументов и вовсе не приводится. Когда на форумах сталкиваются поклонники С++ и Delphi, первые обычно кричат о супернавороченном синтаксисе и потрясающих возможностях ООП, при этом утверждая, что в системном программировании все это необходимо, а вторые - о возможностях того же ООП на дельфи, которых нет в С++, и о том, что на этом языке писать проще. Из слов и тех, и других можно заключить, что обе стороны ни про Delphi, ни про C++ ничего толком не знают, и все это - пустая ламерская болтовня.<br>
<br>
Эта статья посвящена приемам системного программирования на Delphi. Она написана для тех, кто любит этот язык, хочет добиться максимальной эффективности кода и не боится вложить в свое дело определенный труд. Я покажу, как делать на дельфи то, что многие считают невозможным. Тем, кто занимается кодингом на С++, не составит труда найти целую кучу статей по оптимизации. Если же ты пишешь на Delphi, ты не найдешь на эту тему ничего хорошего. Видимо, все считают, что никакой оптимизации здесь не нужно. Может быть, тебя устраивает 400-килобайтная пустая форма с кнопкой? А, ты думаешь, что это неизбежное зло, и уже давно с ним смирился? Что ж, придется немного расстроить твои нервы и развеять священные заблуждения.</div></div>]]></description>
        <author>vito333</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1071608</guid>
        <pubDate>Sun, 09 Apr 2006 21:23:02 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1071608</link>
        <description><![CDATA[vito333: <strong class='tag-b'>Leprecon</strong><br>
мне, в общем, всё равно, статья или не статья, главное суть, а именно - ответы на частые вопросы. Ошибки - поправлю, неясное - дополнительно разъясню. И опираюсь не только на статьи с рсдн, но и на собственный опыт в этом деле. Далее выложу и советы(статьи) по Delphi, чтобы люди и на нём могли красиво писать.<br>
Меня больше привлёк тот момент, что можно приаттачить статьи и файлы, потому как если с рсдн статья никуда не денется, то статьи по Delphi всё больше по личным страницам разбросаны, так что есть риск их потерять.<br>
Ну а стиль - действительно не статейный, так как именно статью писать не планировал. <br>
<br>
&quot;Достаточно, чтобы слова выражали смысл&quot;(с)]]></description>
        <author>vito333</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1070976</guid>
        <pubDate>Sun, 09 Apr 2006 08:09:26 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1070976</link>
        <description><![CDATA[Leprecon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=139119&view=findpost&p=1069511'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>vito333 &#064; <time class="tag-quote__quoted-time" datetime="2006-04-07T10:29:10+00:00">07.04.06, 10:29</time></span><div class='quote '>для начала в опциях линкера -&gt; Optimization -&gt; References надо выбрать &quot;Eliminate Unreferenced Data (/OPT:REF)&quot;,<br>
там же Enable COMDAT folding установи Remove Redundant COMDATs (/OPT:ICF),</div></div>По моему, в статье стоило бы объяснить, что эти опции значат. <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=139119&view=findpost&p=1069511'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>vito333 &#064; <time class="tag-quote__quoted-time" datetime="2006-04-07T10:29:10+00:00">07.04.06, 10:29</time></span><div class='quote '>Одно замечание - теперь твоей программе для работы необходима библиотека msvcr70.dll (это в студии 7.0), при компиляции в другой студии может требоваться немного другая, типа msvcr71.dll (для студии 7.1).<br>
То есть если ты вдруг скопируешь программу на компьютер, где нет такой библиотеки, то она работать не будет. (Но, по-моему, <br>
в windows нет проблем с этими библиотекми.)</div></div>Версия 7.* CRT и MFC поставляется с виндами, только начиная с ХР, по моему. В остальных виндах нет проблем с версией CRT, которая поставлялась с шестой студией.<br>
<br>
Стоило бы поправить кучу орфографических ошибок :lol: , про запятые я вообще молчу ;) <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=139119&view=findpost&p=1069511'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>vito333 &#064; <time class="tag-quote__quoted-time" datetime="2006-04-07T10:29:10+00:00">07.04.06, 10:29</time></span><div class='quote '>А напрмер оператор NEW ты использовать не сможешь,</div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=139119&view=findpost&p=1069511'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>vito333 &#064; <time class="tag-quote__quoted-time" datetime="2006-04-07T10:29:10+00:00">07.04.06, 10:29</time></span><div class='quote '>Напрмер твоя программа несколько видоизмененная </div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=139119&view=findpost&p=1069978'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>vito333 &#064; <time class="tag-quote__quoted-time" datetime="2006-04-07T15:50:05+00:00">07.04.06, 15:50</time></span><div class='quote '>там же на транице ссылка на </div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=139119&view=findpost&p=1069983'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>vito333 &#064; <time class="tag-quote__quoted-time" datetime="2006-04-07T16:05:31+00:00">07.04.06, 16:05</time></span><div class='quote '>ухищрений ваять мленькие проги, при </div></div><br>
<br>
Теперь об общем, стиль какой-то взбаломошный - нет единства. Надо бы объединить твои дополнительные сообщения в одно. Ну это, если ты на статью претендовать хочешь... А так, если поступать по опыту дельфей или БД, которые просто переносят ответы из форума в ФАК, то сгодится, конечно &lt;_&lt; Хотя, мне не нравится идея топика ФАКа, который вобщем-то предоставляет из себя только дополненную комментариями ссылку на статьи РСДНа :(]]></description>
        <author>Leprecon</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069983</guid>
        <pubDate>Fri, 07 Apr 2006 16:05:31 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069983</link>
        <description><![CDATA[vito333: возвращаясь к теме - Как же без лишних ухищрений ваять маленькие проги, при этом в стиле C++ и не особо заморачиваясь? LIBCTINY.LIB старовата и скудновата, самому всё переписывать все функции CRT?<br><br>ещё один известный дядька Joergen Ibsen / Jibz для любителей мелочи написал неплохую библиотеку, которая очень хорошо перекрывает стандартную CRT, особенно для неюникодовых проектов.<br><br>Называется она WCRT  -  Win32API CRT<br><br>Version 1.12<br>Copyright (c) 2003-2004 by Joergen Ibsen / Jibz<br>All Rights Reserved<br>http://www.ibsensoftware.com/<br><br>используется как в примере выше, единственное - возможно придётся отключить стандартные библиотеки.<br><br>Вообще-то с библиотекой идёт отличная документация.]]></description>
        <author>vito333</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069978</guid>
        <pubDate>Fri, 07 Apr 2006 15:50:05 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069978</link>
        <description><![CDATA[vito333: вот кстати в тему<br>
<strong class='tag-b'>Написание экстра-маленьких Win32 приложений на С++ от 1 КБ используя лишь API, на примере программы Windows Hider</strong><br>
http://www.uinc.ru/articles/28/index.shtml<br>
уж не помню, чего я там подкрутил :), но получилось ещё поменьше - мой проект в архиве тоже.<br>
<br>
там же на странице ссылка на исходник примера микро-dll - да,да, с ними дело обстоит точно так же, как и с ЕХЕ.]]></description>
        <author>vito333</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069970</guid>
        <pubDate>Fri, 07 Apr 2006 15:36:43 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069970</link>
        <description><![CDATA[vito333: всё это хорошо, скажете вы, но это же каменный век&#33; как кодить на C++ без new? без delete? а как же классы?<br>трудно, но возможно. Раз не хочется цеплять к маленькой супер-программе тяжелый хвост CRT, надо прицепить маленький хвостик, какую нибудь другую CRT&#33;<br>Давным давно дядька Matt Pietrek поработал над этим вопросом и даже выдал на гора результат - статью и библиотеку<br>&quot;Reduce EXE and DLL Size with LIBCTINY.LIB&quot; <br>http://msdn.microsoft.com/msdnmag/issues/01/01/hood/default.aspx <br>с исходниками <br><br>конечно, она (библиотека) несколько устарела, не поддерживает юникод, к тому же она таки весьма малофункциональна, но new и delete она вам обеспечит, так что уже можно писать небольшую утилитку с её помощью. Всё что надо сделать - в свойствах проекта Linker -&gt; Additional Dependencies - LIBCTINY.LIB<br><br>Прикладываю пример проекта (для студии 7.1, для 7.0 переименуйте файлы с расширением .old) с использованием этой библиотеки. В примере нормальная работа с классами, создаётся окно, всё чин по чину.]]></description>
        <author>vito333</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069941</guid>
        <pubDate>Fri, 07 Apr 2006 15:07:43 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069941</link>
        <description><![CDATA[vito333: теперь самое время утолить жажду познания тех, кто хочет копнуть глубже и выяснить, откуда ноги (уши, хвосты) растут :)<br>
<br>
Нет, сам я не осилю, есть настоящие спецы.<br>
самая лучшая статья по оптимизации для пишущих на VC++ 6,7 (да и 8 наверное): <br>
http://www.rsdn.ru/article/cpp/crt.xml <br>
или она же: <br>
http://www.rsdn.ru/article/?51<br>
в этой же статье описано, как и почему возникает популярное<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>LIBCMT.lib(crt0.obj) : error LNK2001: unresolved external symbol _main</div></div><br>
---------------------------<br>
приложу её на всякий случай]]></description>
        <author>vito333</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069925</guid>
        <pubDate>Fri, 07 Apr 2006 14:57:56 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069925</link>
        <description><![CDATA[vito333: в качестве примера микро-программ выкладываю три проекта (скорее проектика :)), наглядно демонстрирующих радикальный отказ от библиотеки CRT.<br>
Это EmptyBin - при запуске программа очищает &quot;Корзину&quot; и тут же выходит;<br>
MicroHelloWorld - программа выводит окно сообщения с самым популярным программистским сообщением;<br>
MicroGDI - программа-пример из книги Фэнь Юаня.<br>
<br>
Ну и что, скажете вы, размеры крошечные, а толку? ничего полезного эти программы не делают.<br>
Тогда пойдём и глянем тут:<br>
<a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=127893' target='_blank'>NanoTime v.091</a><br>
обрезание CRT позволило уменьшить программу почти в три раза, а программа не совсем уж бесполезная.]]></description>
        <author>vito333</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069903</guid>
        <pubDate>Fri, 07 Apr 2006 14:42:28 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069903</link>
        <description><![CDATA[vito333: то есть если быть точным, то при компиляции получился файл размером 1 кб, но когда счёт совсем на байты идёт, я обычно использую yoda&#39;s PERealigner 2.0 (y0da.cjb.net - там, кстати, ещё куча полезных программ и исходников есть).<br>Он то и почикал без всякой компрессии полученный 1 кб, превратив его в 718 байт.<br><br>Из множества разных pe-optimizer-ов он оказался самым стабильным и эффективным.]]></description>
        <author>vito333</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069570</guid>
        <pubDate>Fri, 07 Apr 2006 11:12:11 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069570</link>
        <description><![CDATA[Leprecon: А дальше? :blink:]]></description>
        <author>Leprecon</author>
        <category>C/C++ FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069511</guid>
        <pubDate>Fri, 07 Apr 2006 10:29:10 +0000</pubDate>
        <title>Минимизация размера программ</title>
        <link>https://forum.sources.ru/index.php?showtopic=139119&amp;view=findpost&amp;p=1069511</link>
        <description><![CDATA[vito333: Очень часто у программистов (обычно начинающих, а иногда и не только) возникают вопросы по поводу размера получающихся программ, особенно программ типа &quot;Hello World&#33;&quot; :), мол, почему моя программа получается 36 кб(VC++) или 300-400 кб (BCB,Delphi), хотя почти ничего при этом не делает. В этой теме я хочу по возможности ответить на подобные вопросы, подсказать, как быстро урезать программу, как правильно программировать, чтобы программа получилась на порядок меньше.<br>
Сам я маниак, люблю компактные программы (надо сразу оговориться, что сам я ковыряюсь только под VC++, под Delphi буду выкладывать только статьи и примеры).<br>
(Те, кто считает, что размер программы в настоящее время не играет никакой роли могут не тратить время и не читать далее. Так же не надо озвучивать и своё мнение по этому поводу.)<br>
----------------------------------------------------<br>
Итак, вот типичный вопрос (с этого же форума):<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
Написал простенький код на VC:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;stdio.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">int main(int argc, char *argv[ ])</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;%s&quot;,argv[1]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script> <br>
После компиляции .obj файл занимает 2 кб, но линкер преобразует ео в огромный 36кб exe по видимому включая в него ненужные библиотеки. Помогите разобраться в этом. Какие опции линковщика нужно применить чтобы сделать программу нормального размера?<br>
</div></div><br>
<br>
что можно сделать в таком случае, не вдаваясь особо в технические детали? <br>
Можно правильно настроить свой проект:<br>
для начала в опциях линкера -&gt; Optimization -&gt; References надо выбрать &quot;Eliminate Unreferenced Data (/OPT:REF)&quot;,<br>
там же Enable COMDAT folding установи Remove Redundant COMDATs (/OPT:ICF),<br>
Optimize for Win98 выбрать NO<br>
в результате - код уменьшится до 26.5 кб без каких либо потерь функциональности.<br>
Далее, можно в начало файла вставить такие строчки<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#pragma comment(linker, &quot;/MERGE:.rdata=.text&quot;)</div><div class="code_line">//#pragma comment(linker, &quot;/MERGE:.data=.text&quot;)</div><div class="code_line">#pragma comment(linker, &quot;/SECTION:.text,EWRX&quot;)</div></ol></div></div></div></div><br>
из первых двух строк надо оставить незакомменченной только одну любую (иногда обе) - выиграешь ещё полкилобайта (мелочь, но приятно).<br>
<br>
Результат - 26 кб - БЕЗ ПОТЕРЬ ФУНКЦИОНАЛЬНОСТИ.<br>
Причем твоя программа может переноситься с компа на комп и не будет требовать никаких библиотек, так как ей нужен для работы только kernel32.dll.<br>
<br>
Теперь можно сделать следующее - заходим в опции C/C++ -&gt; Code Generation.<br>
Смотрим на строку Runtime Library. Скорее всего там стоит &quot;Single-threaded (/ML)&quot;, что означает, что к программе прилинковывается код инициализации библиотеки времени выполнения (так называемый С runtime, CRT), который в нашей похудевшей до 26 кб программе составляет около 23 кб.<br>
Убедиться в этом можно выбрав в этой опции &quot;Multi-threaded DLL (/MD)&quot;.<br>
Компилим и получаем .EXE файл размером 2.5 кб. Вуаля.<br>
<br>
Одно замечание - теперь твоей программе для работы необходима библиотека msvcr70.dll (это в студии 7.0), при компиляции в другой студии может требоваться немного другая, типа msvcr71.dll (для студии 7.1).<br>
То есть если ты вдруг скопируешь программу на компьютер, где нет такой библиотеки, то она работать не будет. (Но, по-моему, <br>
в windows нет проблем с этими библиотекми.)<br>
функциональность в этом случае не страдает - можно пользоваться стандартными функциями С как обычно.<br>
<br>
Ну и в конце концов можно радикально отказаться от этого кода инициализации, в каком бы он виде не был - dll или статически (навсегда) прилинкованный к программе.<br>
Но тогда ты лишаешься возможности использовать как обычно функции CRT, например стандартную strcpy() или ту же printf(). Можно использовать только WinAPI и писать/использовать свои варианты необходимых функций, которых нет в winapi. Например вместо strcpy() отлично работает lstrcpy(), и так с несколькими строковыми функциями. А например оператор NEW ты использовать не сможешь, как и malloc() и т.п., надо использовать HeapAlloc(), GlobalAlloc() и пр.<br>
<br>
Выигрыш только в размере за счёт потери удобства программирования. Так что это имеет смысл только для крошечных программ и утилит, либо если ты хочешь прослыть эстетом.<br>
Например твоя программа несколько видоизмененная будет весить 1 кб и не требовать никаких библиотек. <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#pragma comment(linker, &quot;/MERGE:.rdata=.text&quot;)</div><div class="code_line">#pragma comment(linker, &quot;/SECTION:.text,EWRX&quot;)</div><div class="code_line">#include &#60;Windows.h&#62;</div><div class="code_line">int main(/*int argc, char *argv[ ]*/)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;//printf(&quot;%s&quot;,argv[1]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;LPTSTR cmd = GetCommandLine();</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD t;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), cmd, lstrlen(cmd), &amp;t, NULL);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Правда это не совсем та программа, поскольку она выводит полностью комстроку, так как возможность использовать int argc, char *argv[] потеряна и необходимо парсить комстроку как-то по другому. Варианты есть, но я не буду здесь распространяться, это уже другой вопрос.<br>
Размер программы теперь - 1 кб. Ну или даже 718 байт.<br>
<br>
Как сотворить сие злодеяние? <br>
в опциях линкера Advanced -&gt; Entry Point установить &quot;main&quot; ну и чуть подправить код. <br>
<br>
<strong class='tag-b'>всё вышесказанное в равной степени относится к неконсольным windows-программам</strong>]]></description>
        <author>vito333</author>
        <category>C/C++ FAQ</category>
      </item>
	
      </channel>
      </rss>
	