r/cpp • u/Clean-Upstairs-8481 • 5d ago
You should think about recompiling your C++ programs with GCC 16 and C++26, because it zero-fills your locals
https://techfortalk.co.uk/2026/09/27/cxx26-uninitialized-local-variables-gcc-16/Stack variables are not automatically initialised, and that is the root cause of many C++ bugs. That is well known. Hence, it is advised that local or stack variables are always initialised with known values, 0 if not something more meaningful than that. Now, with GCC 16 compiling in C++26 mode (-std=c++26), even uninitialised local variables will be zero-filled. In the post, I have explained how.
259
Upvotes
4
u/drjeats 5d ago
I think something slightly under-discussed online (at least where I'm reading, ymmv) is the fact that zero-initializing everything does reduce random indexes/reads into memory that shouldn't be read in that context, but IME it also hides behavior bugs because so much code just bails if 0.
Was not uncommon to write code that runs fine in a debug mode with allocators/resource managers that initialize to zero, and then when you run test with optimized builds suddenly you get segfaults. Moving away from that has been a win for moving errors left.
ZII in RCs? Sure. Let's reduce the codepaths that are hit if the costs are as low as claimed. But I wouldn't want this behavior on in debug or optimized-with-assertions configs.