Есть ли разница между следующими частями кода:
while (a==b);
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. Хотите знать, может ли это как-то повлиять на производительность?
Влияет ли это на компилятор или время выполнения?
Нет, это одно и то же. Во время выполнения не будет никакой разницы, а разница во времени компиляции — ничтожная разница для разбора {;}
,
Если по какой-либо причине вам нужно выбрать одну, выберите ту, которая проясняет ее намерения.
Хороший основной компилятор сгенерирует точный ассемблерный код. Таким образом, нет никакой разницы в фактической производительности во время выполнения.
Это вопрос восприятия, какой из них вы выбираете. Подберите тот, который соответствует вашим стандартам кодирования.
Нет, это не должно иметь абсолютно никакого влияния на производительность.
Скобки не генерируют код как таковой. Компилятор использует их для определения начала и конца составного оператора, ничего больше. Для компилятора составные или отдельные операторы обрабатываются одинаково — фигурные скобки просто для того, чтобы компилятор знал, что вы хотите использовать в качестве оператора для цикла while.
Оба будут иметь одинаковое время выполнения, когда мы напишем while (a == b); Компилятор внутренне преобразует его в while (a == b) {;}. Так что не имеет значения, в какой форме вы это написали.