News for hackers. Stuff that matters.
Re:Progress on C23 by MontyCarloHall on Sunday September 05, 2021 @12:49PM (#28425667)
Because a struct of bools != a bitfield. C booleans as defined in stdbool.h are just convenience macros aliasing "true" to 8 bit integer 1 and "false" to 0. AFAIK, there aren't any compilers smart enough to implicitly pack a struct of bools into a bitfield, and then make member access operations implicitly mask the bitfield. Here's a quick example, using the latest GCC: https://godbolt.org/z/c7T54jzGT
Re:Progress on C23 by isidor3 on Sunday September 05, 2021 @02:27PM (#28426495)
I wrote a little solver for some programming puzzle. Thought I was being clever by using bitfields for an array of booleans to reduce memory usage and bandwidth, as they seemed a natural fit for the problem I was solving.

Turned out that it was actually significantly faster to use one byte per boolean and forgo the masking operations. I assume the processor was just good enough at keeping its cache filled in that particular workload, so the additional masking operations just slowed things down. So I understand why you might not want a compiler to automatically do this.

Re:Progress on C23 by coolreader18 on Sunday September 05, 2021 @01:27PM (#28425990)
Not sure if they edited the comment after you commented, but that is a bitfield now, at least
Re:Progress on C23 by MontyCarloHall on Sunday September 05, 2021 @01:34PM (#28426057)
You're right, I didn't see the :1's. Maybe it was edited, maybe I was just blind?