Я довольно компетентный Java-программист, который плохо знаком с C. Я пытаюсь оптимизировать подпрограмму с четырьмя режимами работы.
Я перебираю все пиксели изображения и вычисляю новое значение в зависимости от пройденного режима.
Мой вопрос касается накладных расходов оператора switch в двух вложенных циклах for. Я был бы заинтересован в любых ссылках на документацию относительно относительной эффективности основных операторов C, математических и логических операций.
Код будет выглядеть следующим образом:
for (x = 0; x < width; x++) {
for (y = 0; y < height; y++) {
switch (mode) /* select the type of calculation */
{
case 0:
weight = dCentre / maxDistanceEdge;
case 1:
weight = (float)x/width;
break;
case 2:
weight = (float)y/height;
break;
case 3:
weight = dBottomLeft / maxDistanceCorner;
break;
case 4:
weight = dTopRight / maxDistanceCorner;
break;
default:
weight = 1;
break;
}
// Calculate the new pixel value given the weight
...
}
}
Ожидаете ли вы увидеть большие издержки, если это изображение будет более 5000 x 5000 пикселей? Я пытался провести какое-то тестирование, но мои результаты повсюду, поскольку система (мобильное устройство) работает в фоновом режиме, что может искажать результаты.
Другой вариант - иметь отдельный метод для каждого режима, каждый из которых имеет свои четыре цикла. Это, очевидно, привело бы к избыточному коду, но эффективность - вот название игры.
Заранее спасибо!
Гав