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

    −47

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    static inline int int_cmp(const void *a, const void *b) { 
    	const ut64 va = *(const ut64 *)a;
    	const ut64 vb = *(const ut64 *)b;
    	if (va > vb) return 1;
    	if (va < vb) return -1;
    	return 0;
    }

    Запостил: j123123, 10 Мая 2016

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

    • ut64 va, vb;
      memcpy(&va, a, sizeof(va));
      memcpy(&vb, b, sizeof(vb));

      чтение uint64_t может производиться не по выравненным под 8 байт адресам. Для некоторых архитектур (в частности ARM) необходимо, чтобы обращения к памяти имели естественное выравнивание, т.е. адрес памяти должен быть кратен размеру данных (2 для short, 4 для int, 8 для uint64_t и double).
      Ответить
    • Функция походу для передачи её указателя в qsort / bsearch / что-то аналогичное, так что inline бесполезен. ГК!
      Ответить
      • >Функция походу для передачи её указателя в qsort
        так и есть
        Ответить
      • Компиляторы умеют и такое инлайнить. И даже слово inline для этого необязательно. Оно вообще нужно лишь только чтоб линкор не утонул.
        Ответить
        • Сомневаюсь, что lto осилит это с shared libc (если вообще осилит).
          Ответить
          • Lto зачастую тупо собрать код во что-то корректно работающее не осиливает.
            Ответить
            • Can confirm: попробовал поюзать bare metal C++11 на микроконтроллере STM32 с LTO и с плавающим питухом.

              На первый взгляд всё круто, все сотни абстракций libopencm3 в ассемблере превращаются в достаточно короткий код без вызовов функций, как будто сам байтоебил на асме.

              Однако на самом деле некоторые вещи просто-таки идут по пизде. std::uniform_real_distribution<float>(0, 1)(random_engine) упорно возвращает 2.0f, а std::uniform_int_distribution<>(0, 1)(random_engine) зацикливается нахуй.

              Такие дела.
              Ответить
              • Интересно, а на x86 он нормально справляется?
                Ответить

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