Мое предположение было бы в том, что в версии c89 Version 1 быстрее, потому что sizeof
- это оператор времени компиляции, поэтому мы будем сравнивать с константой. Но в c99 мы можем взять sizeof
VLA, поэтому sizeof
является оператором времени выполнения. Итак, какой из них быстрее в c99? И какой из них быстрее в c89?Что происходит быстрее при сравнении циклов?
Один определить и массив для обоих из них:
#define NUM_ROWS(x) (int) (sizeof(x)/sizeof((x)[0]))
int x[5] = { 0 };
Версия 1:
int i;
for (i = 0; i < NUM_ROWS(x); i++) {
// code
}
Версия 2:
const int length = NUM_ROWS(x);
int i;
for (i = 0; i < length; i++) {
// code
}
Какой из них у вас профиль? Никто, один из них, или оба? – usr2564301
Этот вопрос не имеет никакого смысла в реальном мире ИМО. Я уверен, что большинство компиляторов достаточно умен, чтобы выяснить, изменит ли значение sizeof его значение или нет во время выполнения цикла и оптимизирует его. Тем не менее, это, вероятно, не обязательно, поэтому он зависит от компилятора и оптимизации. – luk32
@Jongware Оба из них. Но я не мог сделать это правильно, если честно, это не такая простая задача, чтобы выполнять профиль без предубеждений. (И мне никогда не приходилось использовать инструменты для профилирования раньше) – user10607