Интересно, как это называется?

Смотрю тут один опенсорсный проектик на гитхабе и понимаю, что в Cisco работают такие же индусы, как и везде (хотя нет, кое-где за такое могут и уебать):

https://github.com/cisco/ns3-802.11ax-simulator/blob/master/ns-3.26/src/wifi/model/rrm-wifi-manager.cc

Совершенно шикарны строки со 149 по 155, да и все их многочисленные копипасты. Поневоле задумываешься, как же в принципе может более-менее стабильно работать современный софт и тем более железо, разработанное «клоунами под руководством мартышек».

PS Посмотрел профили указанных в заголовке индусов на линкедине. Сильно опечалился.

Интересно, как это называется?: 21 комментарий

  1. А можно подробнее для не сильно опытных? Струтурка там 15 КБ, на стеке не выделишь. Заменить выделение и очистку макросом? Или плохо гонять malloc в каждой функции? В теории можно выделить раз и переиспользовать, но только если функции точно не будут друг друга вызывать.

    1. > 15 КБ, на стеке не выделишь.

      И чо? 15 кБ на стеке нормально себя чувствуют (если мы не скатываемся в рекурсивные вызовы, что в данном случае не нужно).

      (вопрос о том, нужны ли вообще структуры по 15к, пока опустим)

      Гонять malloc вообще плохо — вон там чуть ниже ребята где-то free забыли.

    2. Писал, писал и все пропало…

      malloc можент вернуть 0 и не проверив это memset обнулит память с нулевого адреса с непредсказуемыми глюками или вылетом сразу, но даже если первый мемсет очистит буфер, что на стеке, что на куче, то следующий с message->data гарантированно пропишет все с нулевого адреса.

        1. Схренали?
          Кто запрещает отобразить соответствующие адреса пространства процесса на реальную память?

                1. memset(mcsInfoResp,0x00,sizeof(TlvBuffer));

                  memset(mcsInfoResp->data,0x00,BUFFER_DATA_MAX_SIZE);

                  Эта связка в принципе не может работать.
                  Либо там фуфло, либо его никто никогда не тестировал, либо с нулевой страницей все нормально.

  2. Знаю я тут одного из Unwired Device. Нещадного гнобителя программистов.
    Вот тут можно посмотреть качество кода от этой конторки
    https://github.com/unwireddevices/lora-mqtt/blob/master/mqtt.c

    Строки 499, 500, 502 память выделяется, освобождается в строках 526-528. До кода освобождения памяти есть return.
    Про длину функций, форматирование кода вцелом я вообще молчу. Как говорится советскую школу хер пропьешь.

    1. А вообще, посмотрел там blame — обычное дело, год назад написано malloc и free, вставляем новый код, про free благополучно забыто. Книжка «почему си гавно», глава первая. Если это все, что удалось найти и предъявить — то вполне себе нормальный код.

      1. C не говно, а инструмент, позволяющий сделать то что ты хочешь, как ты хочешь и когда ты хочешь. А не как во всяких Java, когда объект создается не там, где написано new, а когда захочет Java-машина.

        По поводу говнокода от UD, я особо проблем и не искал, так прошелся по malloc/free. Просто ты любишь цитировать товарища Артамонова, вот пожалуйта код от его конторы.
        Помню делал когда-то контроллер для SMD-печки с его прошивкой. Тот код не отключал нагреватель после окончания программы, хорошо что вовремя заметил.
        Там аффтар забыл одну функцию дописать.

Добавить комментарий для kettle Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *