в то время как (а == Ь); vs while (a == b) {;}

Есть ли разница между следующими частями кода:

  1. while (a==b);
  2. while (a==b) {;}

Влияет ли это на компилятор или время выполнения?

Предпосылки для этих вопросов: В настоящее время FW использует код 1, где a или b на самом деле является глобальной переменной, а FW зависает / ждет в конкретном ядре, пока условие не будет выполнено другим ядром. Мы хотели бы смоделировать этот код в SystemC и этот «бесконечный» цикл while не в контексте SystemC, и поэтому планировщик SystemC не будет знать, что этот поток ожидает другого, что приводит к тупику.

Поэтому мы хотим заменить код на: while (a==b) {CONTEXT_SWITCH(1);}

где для целевой сборки имеем:

#define CONTEXT_SWITCH(x)

и для сборки systemC имеем:

#define CONTEXT_SWITCH(x)   wait(x) //where wait is a systemC wait

Этот код в случае целевой сборки становится кодом 2. Хотите знать, может ли это как-то повлиять на производительность?

3

Решение

Влияет ли это на компилятор или время выполнения?

Нет, это одно и то же. Во время выполнения не будет никакой разницы, а разница во времени компиляции — ничтожная разница для разбора {;},

Если по какой-либо причине вам нужно выбрать одну, выберите ту, которая проясняет ее намерения.

8

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

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

Это вопрос восприятия, какой из них вы выбираете. Подберите тот, который соответствует вашим стандартам кодирования.

1

Нет, это не должно иметь абсолютно никакого влияния на производительность.

Скобки не генерируют код как таковой. Компилятор использует их для определения начала и конца составного оператора, ничего больше. Для компилятора составные или отдельные операторы обрабатываются одинаково — фигурные скобки просто для того, чтобы компилятор знал, что вы хотите использовать в качестве оператора для цикла while.

0

Оба будут иметь одинаковое время выполнения, когда мы напишем while (a == b); Компилятор внутренне преобразует его в while (a == b) {;}. Так что не имеет значения, в какой форме вы это написали.

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