The OpenNET Project / Index page

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



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

Исходное сообщение
"Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."
Отправлено Аноним, 22-Дек-15 19:59 
> А как предсказуемое поведение повлияет на производительность?
> Вот это вот:
> int i = 5;
> i = ++i + ++i;
> Медленнее работать будет? Велико упущение. Нормальный программист не пишет код, результат
> которого не может сам смоделировать в голове. Если есть сомнения в
> приоритетах операций - использует скобки или последовательное выполнение. Или даже ставит
> скобки просто для ясности, чтобы у других не было сомнений в
> том, как работает код.

Медленнее будет работать проверка указателя перед его первым использованием.
Медленнее будет работать проверка на знаковое целочисленное переполнение.
Медленнее будет работать проверка того, не превышает ли величина сдвига ширину типа данных, которые сдвигают.
Медленнее будет работать проверка того, не выполняет ли программист целочисленного деления на ноль (а деление на ноль с плавающей запятой — не всегда некорректная операция, и потребует ещё одной дополнительной проверки).
Медленнее будет работать проверка того, не выполняет ли программист целочисленного деления INT_MIN на -1.
Медленнее будет работать проверка размера variable length array при каждом обращении.
Медленнее будет работать проверка того, выравнен ли указатель, перед каждым его разыменованием.

А ещё в C есть случаи неопределённого поведения, природа которых лежит в особенности реализации аппаратуры. Предлагаете ввести надстандарт над всеми ISA?

А ещё есть C++ со своей кучей интересных случаев.

> Проверка на выход за пределы массива? Принудительная инициализация переменных нулями?
> Но ведь можно делать это по-умному - инициализировать только если где-то
> происходит использование значения до инициализации или размер массива меняется, а конечный
> индекс массива заранее неизвестен.

И на времени компиляции такой анализ совсем не отразится?

> Например, в этом случае достаточно сделать одну проверку:
> for(i = 0; i < n; i++)
>   m[i]++;
> Проверка должна быть одна, до выполнения цикла, что n * sizeof(m[0]) меньше
> полного размера m.

Проверка должна быть одна, но быстрее не делать её вообще.

> Оптимизация не противоречит безопасности. Компиляторы фортрана раньше
> умели на этапе компиляции сумму арифметической прогрессии, посчитанную в цикле, оптимизировать
> до известной формулы. А если там только константы фигурируют, то и
> вообще - на этапе компиляции результат посчитать.

Компиляторы C и сейчас это делают.

> Но можно, конечно, по-тупому
> делать, каждое значение i проверять. В яве, кстати, не так делается?

 

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



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

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