1. Си / Говнокод #7055

    +101

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    double k;
    
    if(deviceType == "firstType"){
      for(int i = 0;i < 100000;i++)
        k = pow(2,10);
    }
    else if(deviceType == "secondType"){
      for(int i = 0;i < 700000;i++)
        k = pow(2,10);
    }

    Думаю этот даунизм поймут все. Маразм крепчал)

    Запостил: eclipse, 25 Июня 2011

    Комментарии (54) RSS

    • Крутая задержка. Аффтар ничего не понимает в Ъэнтерпрайз решениях!!111
      Ответить
    • Кроме как для оценки быстродействия компа смысла в этом коде не вижу.
      Ответить
      • А я и в оценке быстродействия смысла не вижу - компилятор все равно оптимизирует.
        Ответить
    • Ты смотри глубже) Этот код был для ипода.
      Ответить
    • Нормальные компиляторы выпилят эти циклы при включенной оптимизации.
      Ответить
      • gcc умеет перезаписывать уровень оптимизации для конкретных функций. наверное msvc тоже умеет что-то подобное.
        Ответить
    • Сравнение строк через == тоже радует
      Ответить
      • Это нормально для Си, если строки константные
        Ответить
        • Если бы не такая «норма», этот сайт бы и не появился.
          Ответить
        • угу, только в стандарте ни слова ни сказано, что идинаковые строковые литералы будут иметь один и тоже адрес.

          а вот на msdn'е http://msdn.microsoft.com/en-US/library/0h227906(v=VS.80).aspx ясно написано Note that the compiler may not store two identical strings at two different addresses
          Ответить
          • > Note that the compiler may not store two identical strings at two different addresses
            это переводится как "Обратите внимание, компилятор не обязательно разместит две одинаковые строки по разным адресам", что никак ни удешевляет, ни подкрепляет "угу, только в стандарте ни слова ни сказано, что идинаковые строковые литералы будут иметь один и тоже адрес.", "may not" не делает никакого строгого утверждения
            Ответить
        • в си строки сравнивать только через strcmp() и подобные функции. всё остальное от лукавого
          Ответить
      • Это C, а не Java, Fail.


        <hr/>
        По-хорошему надо чтоб оно находило частоту процессора через rdtsc и определяло нужное число итераций.
        >k = pow(2,10);
        а я видел вариацию с вычислениями синуса
        Ответить
        • А подумать?
          Ответить
          • так а что тут думать?
            я ж вообще предлагаю завязать количество итераций на частоту девайса.

            а насичот жабы, это так для красного словца.
            Ответить
            • >завязать количество итераций на частоту девайса.
              Бывают дивайсы с переменной частотой.
              Ответить
              • вообще-то она будет в рантайме считаться.
                Ответить
                • Нет, частота ядра может меняться с изменением загрузки ядра работой
                  Не стоит отбрасывать возможность таких дивайсов, темболее что для ПК это так, поэтому rdtsc не выход.
                  Ответить
        • >rdtsc
          Уже есть на ARM или какие там процессоры в "иподах"?
          Ответить
          • Ппц ребята вы жжете Тут дело не в процессоре, а в компиляторе. Если компилятор увидит такой код он не будет заносить в исполняемый файл 100000 команд а занесет одну команду. И причем здесь процессор?
            Ответить
            • >он не будет заносить в исполняемый файл 100000 команд а занесет одну команду

              спасибо что просветил кеп, а то мы не знали.

              >И причем здесь процессор?
              в зависимости от частоты скорость исполнения будет меняться и задержка будет меняться
              А она по идее должна быть постоянной.
              Ответить
              • Я очень рад что ты знаешь что задержка меняется на разных процессорах, но мы сейчас говорим про оптимизацию, и какой ногой вдруг процессор может влиять на оптимизацию команд. Если ты не понимаешь о чем речь не флуди.
                Ответить
                • да-да, ЗАТКНИСЬ, СУКА!!!
                  Ответить
                  • Бугнерот ты бык галимый, вали из моего говнокода. И нечего обсырать людей даже если чел не понял немного о чем мы говорим. И СУКА здесь только ТЫ.
                    Ответить
                    • Ну, вот 5м голосом "против" выношу тебе приговор скрыться. *СМЕХ ДОКТОРА ЗЛО*
                      Ответить
                    • легким каментом IDE eclipse превращается... превращается... в быдлогопника!
                      Ответить
                • Давайте про женские задержки, что ли. А то атмосфера все больше накаляется. Так хоть отвлечемся на что-то менее интригующее для данного сообщества))))
                  Ответить
                • >и какой ногой вдруг процессор может влиять на оптимизацию команд
                  к сожалению я действительно не совсем понял о чем речь.
                  Ответить
        • Ни в C, ни в Java так сравнивать строки неправильно. Нужно юзать strcmp()/strcoll() и String.equals(Object) соответственно, Fail.
          Ответить
      • Fail не обижайся, но ты дорустил ошибку(Fail).
        Ответить
      • Интересно, кто ещё думает, что в C сравнение строк чере == — это нормально? Ну-ка, признавайтесь?
        Ответить
        • Ну не нормально, но и не совсем уж ахтунг.

          Будет полезно, наверное, когда хочется одновременно сделать enum, но и иметь возможность вывести его имя на экран. С обычным enum нужно писать отдельную функцию для этого, с теми же самыми литералами. Так почему их не переиспользовать?
          Ответить
          • Говно 100%.

            Если нужны строковые энумы — ну так и заводите строковые именованные константы.
            extern char const firstType[];
            char const firstType[] = "firstType";
            Ответить
            • Ну да. Вопрос был про сравнение через == вообще, а не именованные/неименованные.
              Ответить
        • Ребята по поводу сравнения строк вы жжете) Надо наверно отдельный гомнокод писать.
          Ответить
        • А в плюсах нормально?
          Ответить
          • в ++ есть std::string со всеми вытекающими
            Ответить
            • а ещё qstring, а ещё мой велосипед с квадратными колёсами, а ещё...
              Ответить
              • Не путайте "стандартные" и "нестандартные" реализации. Если в чистом Си строковым типом принято считать char*, то в C++ для этих целей рекомендуется использовать именно std::string.
                Ответить
                • >то в C++ для этих целей рекомендуется использовать именно std::string
                  Ага, особенно в системах реального времени...
                  Ответить
                  • Какая связь? За реализацию "реального" времени отвечает ОС.
                    Ответить
                    • >За реализацию "реального" времени отвечает ОС.
                      Отвечает, да не настолько. Выделение памяти std::string'ом явно придёт не по душе реалтаймовой ос. std::string даже аллокаторы не позволяет заменять, не говоря уже о том, что манера выделения памяти std::string'ом нормально не ложится не на какие мемпулы.
                      Ответить
                      • Можно поподробнее про реалтаймовскую душу? В std::string ничто не мешает зарезервировать достаточный размер строки заранее. Хотите побаловаться с аллокаторами - инстанцируйте от шаблона basic_string. И кстати, о какой манере выделения памяти речь, неужели про copy-on-write?
                        Ответить
                        • >инстанцируйте от шаблона basic_string
                          А я говорил, что std::string не торт.

                          >Хотите побаловаться с аллокаторами
                          В реалтайм ос всегда приходится баловаться алокаторами и переводить все на пулы.

                          >copy-on-write
                          Это хорошо.

                          >о какой манере выделения памяти речь
                          1)О не возможности нормально зарезервировать нужный объём строки заранее
                          2)Необходима работа с неудобными непродуманными по стандарту аллокаторами.
                          3)Выделение памяти плохо ложится на работу с пулом, ибо нет ограничения на максимальную длину строки. Элементы пула какого размера использовать?
                          4)И вообще, вся эта работа с пулами для данного типа строки будет весьма нудна.
                          Ответить
                          • Торт, не торт, для большинства задач std::string много лучше char*.
                            Всё равно не пойму, почему вы так усердно делаете акцент на ОСРВ.
                            Если стоит необходимость использовать память из определенного/заранее выделенного места, это всё вполне может быть характерно для обычных задач оптимизации, совершенно далеких от "реального времени".
                            Ответить
    • с точностью до такта )
      Ответить
    • Вроде уже столько граблей вытоптано по поводу адекватной паузы - но нет же! каждый год одно и тоже, сколько не клеймят аффтаров позором. и так продолжается уже лет 25 :(
      Ответить
    • паузы на C, даты на PHP, лабы на Delphi
      Ответить
      • как не печально в этом и есть весь говнокод ;( (как ресурс такими темпами он скоро будет мёртв)
        Ответить

    Добавить комментарий