News for hackers. Stuff that matters.
Re:The Lost Art of Structure Packing (2018) by klodolph on Monday April 27, 2020 @10:33AM (#22996169)
Reorg is prohibited by C standard.
Re:The Lost Art of Structure Packing (2018) by gpderetta on Monday April 27, 2020 @03:05PM (#22998851)
It is complicated. Because of the as-if rule, a compiler can do anything it wants as long as a conforming program can't tell the difference. So for example if a compiler can prove that a program doesn't compare fiel addresses, doesn't cast pointer to a struct to its first member, etc it can reorder as it pleases. Turns out it is very hard to prove, often requires whole program optimization and the gains are questionable, so it is seldom done. Both clang and gcc had such an optimization pass in the past but it got dropped.
Re:The Lost Art of Structure Packing (2018) by virgilp on Monday April 27, 2020 @01:06PM (#22997688)
I know, it wasn't obvious to me that elteto talked exclusively about C/C++. AFAIK few -if any- compilers/VMs take it upon themselves to reorder struct members (even outside C/C++ world).
Re:The Lost Art of Structure Packing (2018) by saagarjha on Tuesday April 28, 2020 @01:23AM (#23003679)
Both Swift and Rust have an unspecified structure ordering by default, which almost always boils down to "the compiler will lay them out in the order specified, except if you leave enough padding to fit a member, in which case it'll reorder the elements for you".
Re:The Lost Art of Structure Packing (2018) by leni536 on Monday April 27, 2020 @01:25PM (#22997876)
Even though struct member reordering is prohibited, the order of std::tuple elements are not fixed by the standard. There could be an stdlib implementation that used this fact to reorder tuple members optimally.

AFAIK there are PoC 3rd party implementations for such tuples.