Какое выражение лучше для этого оператора if?

Мне рассказали о патче для ffmpeg, который исправляет проблему при потоковой передаче на FLV-плееры.

Вокруг линии 2314 г. rtmpproto.c есть следующее выражение:

if (rt->flv_header_bytes < 11)
break;

Исправление должно изменить это, чтобы включить это дополнительное требование:

if (rt->flv_header_bytes < 11 && !rt->flv_off)
break;

Однако мне любопытно о логике этого утверждения. Первый оператор проверяет, меньше ли заголовок FLV, чем 11 байтов, но не будет ли эффективнее проверить, включен ли поток flv первым, прежде чем он проверяет, сколько байтов имеет заголовок?

if (!rt->flv_off && rt->flv_header_bytes < 11)
break;

В качестве альтернативы, как насчет изменения выражения, чтобы оно было таким?

if (rt->flv_off || (!rt->flv_off && rt->flv_header_bytes < 11)
break;

Будет ли это более эффективным или это может как-то сломать код?

0

Решение

Это зависит от того, какое условие не выполняется чаще всего, и от того, соблюдает ли компилятор порядок, в котором вы ввели условия. Предполагая, что последнее верно (большое предположение), возможно, более эффективно сначала проверить размер заголовка, поскольку предположительно проигрыватель FLV обычно включен.

Для полной оценки потребовалось бы больше подробностей … хотя в любом случае, вероятно, ничего из этого не имеет значения, поскольку (а) время, потраченное впустую, почти наверняка незначительно, и (б) компилятор, скорее всего, выполнит работу по оптимизации намного лучше, чем вы. будут.

Если вы хотите использовать ИЛИ, как в третьем утверждении, просто примените закон Деморгана и напишите

if(rt->flv_off || rt->flv_header_bytes >= 11)

Но опять же, это не то, о чем действительно нужно беспокоиться.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]