Две переменные time_t
говорят start_sec и end_sec. Теперь мне нужно выполнить миллион операций, чтобы выяснить, попадает ли данный случайный time_t
в этот диапазон.
if(given_sec >= start_sec && given_sec <= end_sec) {
/* given_sec falls in the interval*/
}
Или
start_sec -= -1; //keep it for million comparisons
end_sec += 1; //keep it for million comparisons
if(given_sec > start_sec && given_sec < end_sec) {
/* given_sec falls in the interval*/
}
Какой из них лучше?
Думаю, на уровне сборки je loc; jle loc; jg loc; jge loc
используются для прыжков. Мне было интересно, сэкономит ли jg loc; jl loc
циклы ЦП.
2 ответа
Прекрасный пример преждевременной оптимизации на микроуровне, заботы об отдельных циклах ЦП, которая ничего не дает, но запутывает ваш код - start_sec
и end_sec
больше не содержат значений, которые предполагают названия. И вы даже не так оптимизировали:
start_sec -= -1; //keep it for million comparisons
Это добавит единицу к start_sec
.
Откуда берутся миллионы значений time_t
? Входной файл? База данных? С системных часов? Генератор случайных чисел? Каждый из этих источников будет по величине медленнее, чем сравнение. Таким образом, даже если <и> на несколько циклов ЦП быстрее, чем <= и> = (для данного набора инструкций на данном конкретном ЦП), и профилирование показывает, что этот цикл на самом деле является вашим узким местом, эта «оптимизация» вряд ли решит Эта проблема. Специально для нескольких миллионов сравнений на современных процессорах с тактовой частотой ГГц и миллиардами циклов в секунду.
Нет, они ничего не сохраняют, и если бы они были, оптимизатор все равно бы вам помог.
Похожие вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.