The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"25 уязвимостей в RTOS Zephyr, в том числе эксплуатируемые че..."
Отправлено Аноним84701, 27-Май-20 19:07 
> Только скорость математики в несколько раз обвалится, из-за разбавления проверками.

Но далеко не всегда и далеко не везде:


#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#define unlikely(x) __builtin_expect(!!(x), 0)

int main(int argc, char **argv) {
  int i = 0, add = atoi(argv[2]), max = atoi(argv[3]);
  printf("int max %d\n", INT_MAX);
  if (*argv[1] != 'c') {
    puts("unchecked");
    for (; i < max; i += add);
  } else {
    puts("checked\n");
    while (i < max) {
      int of = __builtin_add_overflow(i, add, &i);
      if (unlikely(of)) {
        if (of)
          puts("overflow detected!!1\n");
        break;
      }
    }
  }
  printf("i = %d\n", i);
  return 0;
}


старенький i5 M, тайминги:

% export TIMEFMT=$'%E'
% gcc -Wall -Wextra -Wpedantic -O3 addbench. #gcc 9
% time ./a.out c 1 2147483647
int max 2147483647
checked
i = 2147483647
2,10s

% time ./a.out u 1 2147483647
int max 2147483647
unchecked
i = 2147483647
2,05s

% for i in {1..50}; do time ./a.out c 1 2147483647 > /dev/null; done 2>&1 | awk '{sum+=$1}END{print "avg:" sum/NR}'|column        
avg:1,8536  # checked

% for i in {1..50}; do time ./a.out u 1 2147483647 > /dev/null; done 2>&1 | awk '{sum+=$1}END{print "avg:" sum/NR}'|column
avg:1,8606  # unchecked


Бонус:

% time ./a.out c 2 2147483647
int max 2147483647
checked
overflow detected!!1
i = -2147483648
1,21s

% time ./a.out u 2 2147483647
int max 2147483647
unchecked
^C
21,80s   #неопределенное поведение, оно такое.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру