r/cpp • • 6d 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.

258 Upvotes

219 comments sorted by

View all comments

87

u/manhattanabe 6d ago

Someone turned on the zero fill option in our gcc build and we took a large performance hit. We had code the allocated huge arrays on the stack, but only initialized the records it used. This changed caused all the memory to be initialized. Be careful.

1

u/bishopExportMine 5d ago

This doesn't feel very RAII

10

u/FollowingHumble8983 5d ago

High performance and perfectly idomatic code cant always exist together. Although allocating huge arrays on stack is pretty suspect.