|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Aleksey Cheusov 2:5020/400 20 Nov 2002 15:53:32 To : Vitaly.Lugovsky@ontil.ihep.su Subject : Re: kernel compiling -------------------------------------------------------------------------------- Vitaly.Lugovsky@ontil.ihep.su writes: > Aleksey Cheusov <cheusov@scnsoft.com> wrote: > > >> Далеко не всякий компилятор правильно распознает по настоящему пустой > >> цикл. Обмануть тот же MSVC - проще простого. Хреновенько он dataflow > >> чекает. > > > Поскольку мне иногда все-таки приходится это шило (MSVC) использовать, > > то у меня к нему есть вполне конкретные претензии даже с кусками > > "проблемного" > > кода. > > Сейчас у меня нет доступного msvc, так что реальных примеров не приведу. > А вот у меня такой код есть. Скомпилируй на досуге в DEBUGе (только обязательно в DEBUG). class AAA1 { virtual void aaa1 () = 0; }; class AAA2 { virtual void aaa2 () = 0; }; class AAA : public AAA1, public AAA2 { public: // virtual ~AAA (){} }; class BBB { public: BBB () {} virtual ~BBB (){} }; class CCC : public AAA, public BBB { public: CCC (){} virtual ~CCC (){} virtual void aaa1 (){}; virtual void aaa2 (){}; }; int main () { CCC *shilo = new CCC [1]; delete [] shilo; return 0; } Само собой есть и более навороченные случаи, а есть и просто полтергейст:( > > > Hо интересно, что сейчас имеется ввиду. Только конкретно. > > Без лишних слов о дерьмовости C++. Просто дай кусок кода. > > Да тут не в C++ дело, а в возможностях самого компилятора. Он не умеет > делать такие фишки, как Intel, вроде грамотного разворачивания циклов при > константном, но не явно определённом пределе, не вычисляет во время > компиляции более-менее сложные константные конструкции, и т.п. Об чём тут, > собственно, и речь - пустой цикл с его точки зрения не всегда пустой. Вот у меня icc под рукой нет - проверить не могу, но MSVC по этому коду int main () { int sum = 0; for (int i=0; i < 5; ++i){ for (int i=0; i < 15; ++i){ ++sum; } } return sum; } сгенерил вот это _main: 00401000 mov eax,4Bh 00401005 ret Куда эффективнее? Я скажу больше: Hа моих целочисленных задачах ICC проигрывает 5-15%%, GCC - ~3%. Так что в плане оптимизвции, микромягкий MSVC очень даже не плох в сравнении с... -- Best regards, Aleksey Cheusov. --- ifmail v.2.15dev5 * Origin: Science Soft (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/17283e93fee2d.html, оценка из 5, голосов 10
|