4 ms·
I don't agree with the article but this is actually true, exceptions and RTTI are the two exceptions to the zero overhead principle. if you don't use -fno-excep
by asddubs 6y ago
I don't agree with the article but this is actually true, exceptions and RTTI are the two exceptions to the zero overhead principle. if you don't use -fno-exceptions (or mark the function as noexcept), every function will generate additional instructions to deal with potential exceptions happening
https://en.cppreference.com/w/cpp/language/Zero-overhead_principle https://en.cppreference.com/w/cpp/language/Zero-overhead_pri...
- junon 6y agoThis is false. Most code emitted by modern compilers incurs no overhead for exceptions except for when they are actually thrown. This is a historical rule that is no longer true. https://stackoverflow.com/a/13836329/510036 https://stackoverflow.com/a/13836329/510036
- asddubs 6y agoI don't think it really contradicts what I said, I didn't say extra instructions were executed on each function call, just generated. I guess it depends on how you define overhead, but if you compile a program that does not use exceptions with exceptions on, it will run slower if you benchmark it. That being said, I do use exceptions and think they're obviously worth it, but there is an overhead to them, even if it's not as simple as "x additional instructions are executed"
- nzmsv 6y agoThat would be one strange benchmark then. It would have to be benchmarking something other than the code in question. Simple analogy: let's say you have a program that has 10 functions in it. You write a benchmark that exercises one of these and never (no, not once, never) calls the other functions. The other 9 are truly dead code. Would you expect the benchmark result to be different between that and a program that only included the one function being benchmarked?
- asddubs 6y agoyes if the generated code causes e.g. more cache misses and branch mispredictions, which additional instructions inbetween the executed ones will
- junon 6y agoDid you benchmark with layout randomization?
- gmueckl 6y agoThere are instances where I can get current GCC to generate less instructions as part of the normal control flow when adding noexcept declarations. This is quite surprising given the common claim that exceptions shouldn't affect that. Unfortunately, I think I lost the example where I could reproduce it in the Compiler Explorer.