У меня есть код в моем приложении C++, который обычно делает это:
bool myFlag = false;
while (/*some finite condition unrelated to myFlag*/) {
if (...) {
// statements, unrelated to myFlag
} else {
// set myFlag to true, perhaps only if it was false before?
}
}
if (myFlag) {
// Do something...
}
Вопрос, который у меня есть, относится к оператору else
моего кода. По сути, мой цикл может установить значение myFlag с ложного на истинное, основываясь на невыполнении определенного условия. Никогда флаг не будет сброшен с true на false. Я хотел бы знать, какое утверждение имеет больше смысла с точки зрения производительности и, возможно, действительно ли эта проблема не является проблемой из-за оптимизации компилятора.
myFlag = true;
OR
if (!myFlag) myFlag = true;
Обычно я выбираю первое, потому что оно требует написания меньшего количества кода. Однако я начал задаваться вопросом, что, возможно, это связано с ненужной записью в память, и, следовательно, последняя предотвратит ненужную запись, если myFlag уже имеет значение true. Но займет ли использование последнего больше времени, потому что есть условный оператор и, следовательно, компиляция кода с использованием большего количества инструкций?
Или, может быть, я слишком много думаю об этом...
ОБНОВЛЕНИЕ 1
Просто немного поясню... цель моего последнего случая - не записывать в память, если переменная уже была истинной. Таким образом, записывайте в память только в том случае, если переменная имеет значение false.
myFlag = true
будет быстрее, однако если вы хотите узнать, что быстрее у вас имеется для профилирования в вашей собственной системе. - person Jack Aidley   schedule 23.02.2013dirty
, которая отследила бы его из всех других ядер, которые могли иметь копиюclean
, и вы должны учитыватьfalse sharing
- но то я передумываю ответ :-) - person amdn   schedule 28.02.2013