<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум Guardant &mdash; Оптимизация при компиляции или особенность адресации Code ключей?]]></title>
	<link rel="self" href="https://forum.guardant.ru/feed/atom/topic/588" />
	<updated>2015-10-14T12:06:40Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.guardant.ru/topic/588/</id>
		<entry>
			<title type="html"><![CDATA[Re: Оптимизация при компиляции или особенность адресации Code ключей?]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2904/#p2904" />
			<content type="html"><![CDATA[<p>Здравствуйте!<br />Умный компилятор оптимизирует данный код, инициализируя только одно значение из массива char b[99000], т.к. остальные значения не используются в примере. Получить ошибку GrdE_gcException (90) можно при попытке взять адрес элемента массива b[98777], так как в этом случае компилятор не сможет проигнорировать его (массива) размер. Рекомендуем инициализировать все элементы массивов (хотя бы нулями memset(&amp;b, 0, sizeof(b)), чтобы быть уверенным, что они не выходят за границы ОЗУ или стека.</p>]]></content>
			<author>
				<name><![CDATA[Станислав Петрушевский]]></name>
				<uri>https://forum.guardant.ru/user/818/</uri>
			</author>
			<updated>2015-10-14T12:06:40Z</updated>
			<id>https://forum.guardant.ru/post/2904/#p2904</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Оптимизация при компиляции или особенность адресации Code ключей?]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2901/#p2901" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[dayznse]]></name>
				<uri>https://forum.guardant.ru/user/809/</uri>
			</author>
			<updated>2015-10-11T14:10:29Z</updated>
			<id>https://forum.guardant.ru/post/2901/#p2901</id>
		</entry>
</feed>
