Hi all,
I'm doing some research on the size costs of various error handling techniques (exceptions, return values, std::expected, TLS, etc). I've got builds set up for MSVC, GCC, and Clang, but I would like other people to do a quick sanity check on my compiler and linker flags to make sure I've got things reasonably tuned for size.
My main caveats are as follows:
1) I'm not going to use LTO. My testing has lots of no-op functions, and LTO would make those functions disappear.
2) I _am_ statically linking as much as I can. I want to measure the cost of the runtime components as well as the extra code.
3) Be as conforming as I can, with the exception of toggling exception handling on and off.
With all that out of the way, here are where my flags are currently stored...
MSVC: https://github.com/ben-craig/error_bench/blob/master/windows.ninja#L17
GCC: https://github.com/ben-craig/error_bench/blob/master/gcc.ninja#L7
Clang: https://github.com/ben-craig/error_bench/blob/master/clang.ninja#L7
I am concerned about my current choices of flags because of the large baseline binaries I am getting. `int main() {return 0;}` gets me these rough sizes...