Какой мертвый код может удалить GCC из окончательного вывода?

Мне всегда говорили, что компилятор достаточно умен, чтобы исключить мертвый код. Большая часть кода, который я пишу, имеет много информации, известной во время компиляции, но код должен быть написан в наиболее общей форме. Я не знаю ни одной сборки, поэтому не могу проверить сгенерированную сборку. Какой код можно эффективно исключить из финального исполняемого файла?

Несколько примеров, но не ограничиваясь

f(bool b){
 if(b){
  //some code
 }else{
  //some code
 }
}
f(true);
//////////////////////////
template<bool b>
f(){
 if(b){
  //some code
 }else{
  //some code
 }
}
f<true>();
///////////////////////////

Что, если определение fнаходится в другом объектном коде, а вызываемый f(true)находится в основном. Будет ли оптимизация времени компоновки эффективно устранять мертвый код? Какой стиль кодирования/вариант компилятора/уловка для облегчения устранения мертвого кода?

17
задан Ciro Santilli 新疆改造中心法轮功六四事件 11 November 2015 в 09:41
поделиться