<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Неорганизованные Заметки Ремесленника</title><link>http://blogs.technet.com/craftsmans_notes/default.aspx</link><description>"Маленькие Хитрости" из различных областей системного программирования</description><dc:language>ru</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Почему "4" Тоже Магическое Число</title><link>http://blogs.technet.com/craftsmans_notes/archive/2006/05/27/430645.aspx</link><pubDate>Sun, 28 May 2006 05:30:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:430645</guid><dc:creator>Konstantin Isakov</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/craftsmans_notes/comments/430645.aspx</comments><wfw:commentRss>http://blogs.technet.com/craftsmans_notes/commentrss.aspx?PostID=430645</wfw:commentRss><description>К тому, что семь – число магическое, все вроде бы привыкли. А почему четыре? А потому, что согласно “__fastcall” calling convention , первые четыре аргумента функции передаются через регистры, а не через stack . То есть вызов функции int __fastcall fooArg4(...(&lt;a href="http://blogs.technet.com/craftsmans_notes/archive/2006/05/27/430645.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=430645" width="1" height="1"&gt;</description></item><item><title>Кому нужен Right Margin</title><link>http://blogs.technet.com/craftsmans_notes/archive/2006/05/19/429548.aspx</link><pubDate>Sat, 20 May 2006 08:28:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:429548</guid><dc:creator>Konstantin Isakov</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/craftsmans_notes/comments/429548.aspx</comments><wfw:commentRss>http://blogs.technet.com/craftsmans_notes/commentrss.aspx?PostID=429548</wfw:commentRss><description>&lt;P&gt;Любой профессиональный текстовый редактор умеет показывать правую границу "полей" (&lt;EM&gt;Right Margin&lt;/EM&gt;). Встроенный редактор &lt;EM&gt;Visual Studio 2005&lt;/EM&gt; не исключение, только по различным причинам эта функция не выведена в &lt;EM&gt;Menu / Toolbars&lt;/EM&gt;. Включается очень просто через ключ в &lt;EM&gt;Registry&lt;/EM&gt;:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;REGEDIT4&lt;BR&gt;[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\Text Editor]&lt;BR&gt;"Guides"="RGB(192,192,192) 98"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Подробнее эта&amp;nbsp; функция описана &lt;A href="http://blogs.msdn.com/saraford/archive/2004/11/15/257953.aspx"&gt;здесь&lt;/A&gt;.&amp;nbsp;А нашёл и показал мне эту ссылку &lt;A href="http://blogs.gotdotnet.com/mattn/default.aspx"&gt;Matt Neerincx&lt;/A&gt;, потому что как-то раз у нас заходил разговор о том, почему я так внимательно слежу за длиной строк в моём коде.&lt;/P&gt;
&lt;P&gt;Ну и почему же, интересно знать? Понятное дело, в 198-лохматом году было важно попадать в 80 колонок на терминале и в 132 колонки на АЦПУ (Алфавитно-Цифровое Печатающее Устройство; тогда ещё не было в обиходе слова "принтер"). Но сегодня, когда можно настроить размер шрифтов для печати и растянуть окно редактора на весь 21-дюймовый монитор, кого это волнует?&lt;/P&gt;
&lt;P&gt;А вот пример:&lt;/P&gt;
&lt;P&gt;&lt;A href="/photos/konstantin/images/429545/original.aspx" target=_blank&gt;&lt;IMG src="/photos/konstantin/images/429545/478x480.aspx" border=0&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;На первый взгляд, ничего плохого в этом вымышленном примере не наблюдается. За исключением того, что результат работы этой функции устойчиво отличается от аккуратно посчитанного по формуле ровно на единицу. Без единой начальной идеи о причинах происходящего, поиск проблемы может завести очень далеко, вплоть до долгих и мучительных поисков ошибки в компиляторе. И зачастую, когда "горят сроки" и начальство постоянно "дышит в затылок", именно так и происходит – копая все глубже, мы утрачиваем способность видеть то, что лежит на поверхности:&lt;/P&gt;
&lt;P&gt;&lt;A href="/photos/konstantin/images/429541/original.aspx" target=_blank&gt;&lt;IMG src="/photos/konstantin/images/429541/583x480.aspx" border=0&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Конечно, этот пример "высосан из пальца", и возможность наступить на такие грабли в современных условиях ничтожно мала. Но суть от этого не меняется: инспектировать код с очень длинными строками сложнее, быстрее "замыливается глаз" и больше шансов пропустить ошибку где-нибудь в 234-й колонке.&lt;/P&gt;
&lt;P&gt;Стандартная ширина текста в 80 колонок – это, скорее всего,&amp;nbsp;анахронизм. Сегодня мы имеем полную возможность "смотреть на вещи шире". Например, удобная цифра - 98, она хорошо подходит к любому из общепринятых размеров табуляции - 2,3,4,8.&lt;/P&gt;
&lt;P&gt;В конце концов, цифра не важна, важно чтобы она &lt;U&gt;была&lt;/U&gt;. Если убрать грабли из-под ног, аккуратно прислонив к стенке в углу за шкафом, то можно бегать по коридору во время очередного аврала без риска на эти грабли наступить.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=429548" width="1" height="1"&gt;</description></item><item><title>О пользе Warning Level /W4</title><link>http://blogs.technet.com/craftsmans_notes/archive/2006/05/18/429169.aspx</link><pubDate>Fri, 19 May 2006 04:44:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:429169</guid><dc:creator>Konstantin Isakov</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/craftsmans_notes/comments/429169.aspx</comments><wfw:commentRss>http://blogs.technet.com/craftsmans_notes/commentrss.aspx?PostID=429169</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;Современный компилятор Microsoft С/C++ способен предупреждать о большом количестве потенциальных проблем в исходном коде, что часто бывает слишком назойливо при компиляции миллионов строк старого кода. Поэтому по умолчанию используется уровень предупреждений /W3.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;С другой стороны, это просто неразумно не использовать такую помощь со стороны компилятора, если мы создаем новый код на C++ и не слишком скованы вопросами обратной совместимости (&lt;EM&gt;backward compatibility&lt;/EM&gt;). И все же уровень предупреждений /W4 в "чистом виде" порождает слишком много предупреждений, которые хочется видеть только "когда спросишь". Иначе за большим потоком "назойливых" предупреждений легко проглядеть важное.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;BR&gt;Поэтому стандартная конфигурация во всех проектах, над которыми я работал и работаю такова:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;- Warning level /W4 обязателен;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;- Флаг /WX делает отсутствие предупреждений обязательным условием успешной компиляции;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;- Используется выработанный годами список предупреждений, которые полезно отключить, чтобы сделать уровень /W4 "разумно строгим":&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Courier New" size=2&gt;#if !defined( _ALL_WARNINGS )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4061)&amp;nbsp;&amp;nbsp; // not all enum values present in switch statement&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4068)&amp;nbsp;&amp;nbsp; // unknown pragma&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4127)&amp;nbsp;&amp;nbsp; // constant expression&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4201)&amp;nbsp;&amp;nbsp; // nameless structs are used&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4214)&amp;nbsp;&amp;nbsp; // nonint packed fields are used&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4275)&amp;nbsp;&amp;nbsp; // nonexport class is a base for export one&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4310)&amp;nbsp;&amp;nbsp; // cast truncates constant value&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4511)&amp;nbsp;&amp;nbsp; // copy constructor could not be generated&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4512)&amp;nbsp;&amp;nbsp; // assignment operator could not be generated&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4705)&amp;nbsp;&amp;nbsp; // statement has no effect in optimized code&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4725)&amp;nbsp;&amp;nbsp; // FDIV Pentium(r) known issue&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Courier New" size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if defined( _DEBUG )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4706) // assignment within conditional expression&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4702) // unreachable code caused by optimizations&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4791) // loss of debugging info in retail version&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Courier New" size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if !defined( _SHOW_INLINE )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4505) // unreferenced static function removed&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4514) // unreferenced inline function removed&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4710) // inline function not expanded&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Courier New" size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if !defined( _SHOW_DEPRECATED )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma warning(disable: 4996) // 'function' was declared deprecated&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;BR&gt;#endif&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;STRONG&gt;Важно:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;BR&gt;- Все &lt;EM&gt;#pragma warning(disable)&lt;/EM&gt; должны быть сосредоточены в одном, хорошо известном месте. Это помогает четко отслеживать конфигурацию проекта, например при такой обязательной процедуре как инспекция кода (&lt;EM&gt;code inspection&lt;/EM&gt;). Поэтому приведенный выше фрагмент полезно включить в &lt;EM&gt;header file&lt;/EM&gt; самого низкого уровня иерархии, что-нибудь типа &lt;EM&gt;BaseAPI.h&lt;/EM&gt; или &lt;EM&gt;Common.h&lt;/EM&gt;. Тогда все единицы компиляции *.cpp будут обрабатываться одинаково.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;BR&gt;- Обязательно должна быть возможность временного &lt;U&gt;включения всех&lt;/U&gt; предупреждений, и это полезно делать периодически. По крайней мере, совершенно необходимо при переходе на новую версию компилятора, чтобы убедиться: да, &lt;U&gt;отключение&lt;/U&gt; этих предупреждений по-прежнему имеет смысл.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;- Чем более предсказуемы имена управляющих символов, тем лучше. Например, я использую _ALL_WARNINGS, а не какой-нибудь SHOW_DISABLED_WARNINGS по одной простой причине: глобальный поиск по дереву проекта покажет также и _AFX_ALL_WARNINGS, и _ATL_ALL_WARNINGS. А если все управляющие символы условной компиляции явно перечислены в каком-нибудь ReadMeFirst.txt из корневого каталога проекта, тогда уж вообще хорошо.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=429169" width="1" height="1"&gt;</description></item><item><title>"Литературное" Вступление</title><link>http://blogs.technet.com/craftsmans_notes/archive/2006/05/15/428652.aspx</link><pubDate>Tue, 16 May 2006 07:34:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:428652</guid><dc:creator>Konstantin Isakov</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.technet.com/craftsmans_notes/comments/428652.aspx</comments><wfw:commentRss>http://blogs.technet.com/craftsmans_notes/commentrss.aspx?PostID=428652</wfw:commentRss><description>&lt;SPAN style="mso-ansi-language: RU"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;Первая и единственная "литературная" заметка. Информация по существу начинается с раздела "Для Затравки".&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;STRONG&gt;О себе &lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;В ответ на вопросы о моей карьере (Как тебя так угораздило? :) я обычно отшучиваюсь:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;обмишурился, дескать, в 1978 году, когда, будучи студентом МАИ, написал свою первую программу (на перфокартах, разумеется) и с тех пор "подсел на иглу". Нет большего пространства для творчества, чем цифровой мир. Где все ограничивается только пределами нашей фантазии, полетом мысли. Где не нужно тратить силы и время для добывания холстов и красок, как художник, или бегать по спекулянтам в поисках нужной микросхемы, как радиолюбитель, или разгружать по ночам вагоны, чтобы купить "фирменные" струны для самодельных гитар, как музыкант известного на весь микрорайон вокально-инсрументальный ансамбля (в 70-х так было положено называть свою рок-группу :)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;Позвольте, странный контекст получается. Среди таких возвышенных понятий как Искусство, Музыка, Полет Мысли, Творчество, слово Ремесленник похоже на оскорбление. За что&lt;/SPAN&gt; &lt;SPAN style="mso-ansi-language: RU"&gt;ж я так себя, любимого?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;STRONG&gt;О Промышленном Программировании&lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;Вы программист на Майкрософте? Ооо! Стало быть, большой математик! Мехмат? Физтех? &lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;Да нет, "от станка" мы, знаете ли. С математикой у нас так себе. То есть какого-нибудь революционного алгоритма видео компрессии от нас не дождутся. &lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;Ха, так что же Вы тогда делаете на Майкрософте?&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;Дело в том, что "полет мысли", творчество, и.т.п. (см. первый абзац) занимает в промышленном производстве коммерческих программных продуктов очень небольшое (не по важности конечно, а по объему вложенных средств и времени) место. Все остальное – это технологические процессы, профессиональные навыки, огромное количество мелких деталей. Одним словом, РЕМЕСЛО.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;STRONG&gt;Об этих Заметках&lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;Российская математическая школа сильна, это всем известно. И Майкрософт действительно с удовольствием принимает на работу выпускников математических кафедр из России. Но с вопросами технологии промышленного производства им приходится осваиваться прямо "на месте", и это не всегда происходит безболезненно.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;В этих заметках я собираюсь, в абсолютно неструктурированной форме, делиться теми маленькими кусочками знания и 20+ летнего опыта работы в индустрии, которые мне и позволяют делать то, что я умею делать – участвовать в промышленном производстве (&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Making&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Stuff&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;That&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Works&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;). Поэтому я пишу слово Ремесленник с большой буквы.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;STRONG&gt;О Читателях этих Заметок&lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;Кому это может быть интересно? &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;TechNet&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;.&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;com&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;ориентирован на &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IT&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;-&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Pro&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;, в отличии от &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;MSDN&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;.&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;com&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;что для программистов-разработчиков. Но мы-то с Вами знаем, что в России &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IT&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;специалист, который вообще не умеет программировать, еще долго будет нонсенс. Поэтому есть надежда, что "маленькие хитрости" из различных областей системного программирования могут быть не только интересны, но и практически полезны тем, кто понимает роль маленьких деталей и цену маленьких оплошностей.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;STRONG&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;Как положено, Об Ответственности (&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Disclaimer&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;) &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;Всё опубликованное в этих заметках является личным мнением автора. Иначе говоря, я не имею права и не говорю от лица Майкрософт.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;Вся информация в этих заметках предоставляется на правах КАК-ЕСТЬ (&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;AS&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;-&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IS&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;), то-&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;бишь: хотя я пишу то, что знаю и не пишу того, что "слышал, но забыл где", это не означает, что никогда и нигде не может быть никаких ошибок. Если Вы используете предоставленную информацию, то под свою ответственность.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;STRONG&gt;Предположения и Соглашения&lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;Предполагается, что читатели этих заметок уверенно владеют &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;C&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;/&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;C&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;++,&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;программированием для &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Microsoft&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Windows&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;(разумеется), и (конечно же) без ума от &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;C&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;#.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;Про русско-английскую смесь. Конечно же, я смеюсь вместе со всеми над Задорновским "Вам чиз наслайсать или целым писом", но также хорошо помню свои сложности, когда впервые увидел полностью русифицированный &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Windows&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;-98. Поэтому многие технические термины будут использоваться в англоязычной транскрипции.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;О&amp;nbsp;вреде и "пользе" курения. В стародавние времена, в советских НИИ, курилка не только наносила вред здоровью, но и была местом естественного обмена технической информацией: "Ух, я только что чего нарыл..!!" Поэтому вместо распространенной в Америке формы предоставления информации "&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Did&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;you&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;know&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;that&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;…" (А Вы знали что...) мне больше нравится форма "&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;I&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;didn&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;’&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;t&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;know&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;that&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;.." (я не знал, что..)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;STRONG&gt;Для Затравки&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;(чтобы представить, как эти заметки предположительно должны выглядеть)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;STRONG&gt;Компилятор&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;STRONG&gt;C&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;STRONG&gt;++&lt;/STRONG&gt; из &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Visual&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Studio&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt; 2005 предоставляет вложенному классу прямой доступ к &lt;/SPAN&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN-US&gt;protected&lt;/SPAN&gt;&lt;/I&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;and&lt;/SPAN&gt;&lt;/I&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;private&lt;/SPAN&gt;&lt;/I&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;members&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN style="mso-ansi-language: RU"&gt; класса объемлющего. Поэтому вложенный класс больше не обязательно объявлять как &lt;/SPAN&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN-US&gt;friend&lt;/SPAN&gt;&lt;/I&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;class Outer&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;void&amp;nbsp;&amp;nbsp; usedByHelperOnly();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;void&amp;nbsp;&amp;nbsp; onHelperReleased();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;public:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Outer()&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ .. }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;~Outer()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { .. }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;class Helper&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Outer&amp;amp;&amp;nbsp; _rHost;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Helper(Outer&amp;amp; host) : _rHost(host)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { ; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;~Helper()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ _rHost.onHelperReleased(); }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;void&amp;nbsp;&amp;nbsp;&amp;nbsp; DoTheJob()&amp;nbsp;&amp;nbsp; { _rHost.usedByHelperOnly(); }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;};&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff"&gt;&lt;FONT color=#0000ff&gt;friend class Helper;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;// Not required in Visual Studio 2005&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;};&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt; &lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;// Outer&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;&lt;STRONG&gt;Есть мнение :)&lt;/STRONG&gt; что интерфейс &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IMalloc&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;, полученный из &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;CoGetMalloc&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;(), "тяжелее" чем "чистый" &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Win&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;32 &lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;HeapAlloc&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: RU"&gt;. На самом деле реальной разницы в скорости нет.&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=2&gt;IMalloc* pMalloc = NULL;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;FONT size=2&gt;HRESULT&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;hr &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;= CoGetMalloc(MEMCTX_TASK, &amp;amp;pMalloc);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;if( FAILED(hr) ){ .. }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT size=3&gt;После получения интерфейса&lt;/FONT&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;pData&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt; = &lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;pMalloc&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;Alloc&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt;(123456);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt;&lt;FONT face="Times New Roman" size=3&gt;это тоже самое&amp;nbsp;что и&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;pData&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt; = &lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;HeapAlloc&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt;(&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;GetProcessHeap&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt;(), 0, 123456);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: RU"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=428652" width="1" height="1"&gt;</description></item></channel></rss>