Вот такой код:
Код
struct Test
{
};
int main()
{
Test(); //********
return 1;
}
{
};
int main()
{
Test(); //********
return 1;
}
Помеченное компилится в:
Код
94 Test();
\ 0000000A E021 LDI R18, 1
\ 0000000C E030 LDI R19, 0
\ 0000000E 018E MOVW R17:R16, R29:R28
\ 00000010 ........ CALL __near_memzero
\ 0000000A E021 LDI R18, 1
\ 0000000C E030 LDI R19, 0
\ 0000000E 018E MOVW R17:R16, R29:R28
\ 00000010 ........ CALL __near_memzero
А если в Test запихнуть пустой конструктор
Код
struct Test
{
Test() {}
};
{
Test() {}
};
то помеченная строка будет полностью выкинута.
Насколько я все это понимаю, автоматически сгенерированный конструктор очищает память (кстати - почему? У Страуструпа написано, что члены встроенных типов не инициализируются), причем оптимизатор почему-то спотыкается и все это не удаляет...
IAR C/C++ Compiler for AVR 4.30A/W32 (4.30.1.3), максимальная оптимизация по скорости (s9)