Модератор: Модераторы разделов
-
BratSinot
- Сообщения: 812
- ОС: Slackware64
Сообщение
BratSinot »
Доброго времени суток!
Есть такой тривиальный код:
Код: Выделить всё
size_t cx = 0;
while ( cx < 64 ) {
bin[cx++] = '0';
}
Собираем его g++ и он выдает следующую строчку:
Код: Выделить всё
warning: iteration 32ull invokes undefined behavior [-Waggressive-loop-optimizations]
Соотвественно если собирать с -O1 и ниже предупреждения нет, т.к. aggressive-loop-optimizations выключен.
Прошу извинить меня, это была моя ошибка, а точнее bin[] был [32].
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Сообщение
drBatty »
BratSinot писал(а): ↑23.09.2013 10:08
Прошу извинить меня, это была моя ошибка, а точнее bin[] был [32].
да. Полюбуйтесь что получается:
Код: Выделить всё
08048370 <main>:
8048370: 31 c0 xor eax,eax
8048372: 8d b4 26 00 00 00 00 lea esi,[esi+eiz*1+0x0]
8048379: 8d bc 27 00 00 00 00 lea edi,[edi+eiz*1+0x0]
8048380: 40 inc eax
8048381: c7 04 85 bc 97 04 08 mov DWORD PTR [eax*4+0x80497bc],0x30
8048388: 30 00 00 00
804838c: 83 f8 40 cmp eax,0x40
804838f: 75 ef jne 8048380 <main+0x10>
8048391: 30 c0 xor al,al
8048393: c3 ret
тут она агрессивно забивает символом '0' все 64
байтаint'а. ЛЮТО, БЕШЕНО.