<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум Guardant &mdash; Оптимизация при компиляции или особенность адресации Code ключей?]]></title>
		<link>https://forum.guardant.ru/topic/588/</link>
		<atom:link href="https://forum.guardant.ru/feed/rss/topic/588" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Оптимизация при компиляции или особенность адресации Code ключей?».]]></description>
		<lastBuildDate>Wed, 14 Oct 2015 12:06:40 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Оптимизация при компиляции или особенность адресации Code ключей?]]></title>
			<link>https://forum.guardant.ru/post/2904/#p2904</link>
			<description><![CDATA[<p>Здравствуйте!<br />Умный компилятор оптимизирует данный код, инициализируя только одно значение из массива char b[99000], т.к. остальные значения не используются в примере. Получить ошибку GrdE_gcException (90) можно при попытке взять адрес элемента массива b[98777], так как в этом случае компилятор не сможет проигнорировать его (массива) размер. Рекомендуем инициализировать все элементы массивов (хотя бы нулями memset(&amp;b, 0, sizeof(b)), чтобы быть уверенным, что они не выходят за границы ОЗУ или стека.</p>]]></description>
			<author><![CDATA[null@example.com (Станислав Петрушевский)]]></author>
			<pubDate>Wed, 14 Oct 2015 12:06:40 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/2904/#p2904</guid>
		</item>
		<item>
			<title><![CDATA[Оптимизация при компиляции или особенность адресации Code ключей?]]></title>
			<link>https://forum.guardant.ru/post/2901/#p2901</link>
			<description><![CDATA[<p>Прошу прощения, если вопрос окажется не совсем по теме ключей.</p><p>Я решил посмотреть как срабатывает Out of memory, и можно ли загружать RAM ключа &quot;до упора&quot;. Написал такую тестовую программку для загружаемого кода:<br /></p><div class="codebox"><pre><code>extern struct
{
    BYTE abRWBuff[256];
} iodata ALIGNED;

int f1 (int q); // прототип

int f1 (int q)
{
    volatile int i;
    char b[99000];  // Массив больше предусмотренной памяти
    b[98777] = 100;   // Пишем по адресу, который выходит за размер RAM
    
    GcaLedOff(0);
    for (i = 0; i &lt; 900000; i++); // Все хорошо - Подмигиваем
    GcaLedOn(0);
    
    return (b[98777] + q); // Возврат (100+q)
}

DWORD main(DWORD dwInDataLng, DWORD dwOutDataLng, DWORD dwP1)
{
    return f1(7);     // Возврат значения 107
}</code></pre></div><p>Как оказалось, данная программа успешно выполняется.</p><p>Это связано с тем, что компилятор как-то оптимизирует исходный код, или с какими-то особенностями внутренней кухни Code-ключа?</p>]]></description>
			<author><![CDATA[null@example.com (dayznse)]]></author>
			<pubDate>Sun, 11 Oct 2015 14:10:29 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/2901/#p2901</guid>
		</item>
	</channel>
</rss>
