2015-08-05 2 views
1
void somefunction(struct *str, const char *status) 
{ 
if (str != NULL) 
    { 
     if (status != NULL) 
     { 
     str_copy(str->something, status, sizeof(str->something)); 
     } 
    } 
} 

// что лучше в смысле цикла процессора выше одного или ниже? Что требует больше циклов процессора?Вложенный Если условие и операция логического И

void somefunction(struct *str, const char *status) 
{ 
if (str != NULL && status != NULL) 
    { 
     str_copy(str->something, status, sizeof(str->something)); 

    } 
} 

Для чего требуется больше циклов процессора?

+0

Почему случайные незнакомые люди в Интернете будут лучше отвечать на это, чем просто профилировать оба? Даже если бы мы действительно хотели ответить, вам нужно будет добавить дополнительные сведения, такие как * язык * (это выглядит как C, но там снова, так что много языков)? Какой компилятор? Какой процессор? –

+1

Со всеми современными компиляторами ваш код оптимизирован. Также, поскольку значение if (str! = NULL && status! = NULL) оценивается слева, код идентичен. Также почему вы заботитесь об оптимизации этого бита кода. Я полагаю, что функция str_copy занимает 1000 раз дольше, чем оператор if. – Arno

ответ

1

Вторая часть кода будет лучше, если ваш язык поддерживает оценку короткого замыкания. В случае оценки короткого замыкания второе выражение в заявлении if (str != NULL && status != NULL) не будет оцениваться, если первое выражение str != NULL оценивает значение false. Преимущество возникает из-за того, что ваш код сборки, соответствующий второму фрагменту кода, не содержит оператора перехода, содержащегося в ассемблере первой части кода.

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

Смежные вопросы