1158
Tell me the truth ... (piefed.jeena.net)
you are viewing a single comment's thread
view the rest of the comments
[-] timhh@programming.dev 0 points 1 day ago

No, in C and C++ a bool is a byte.

since many CPUs require that for whole-word load and store instructions

All modern architectures (ARM, x86 RISC-V) support byte load/store instructions.

or only support a stack pointer that increments in whole words

IIRC the stack pointer is usually incremented in 16-byte units. That's irrelevant though. If you store a single bool on the stack it would be 1 byte for the bool and 15 bytes of padding.

A single byte or bool field within a struct or object will likely result in a whole word being allocated, so that other variables and be word-aligned

Again, no. I think you've sort of heard about this subject but haven't really understood it.

The requirement is that fields are naturally aligned (up to the machine word size). So a byte needs to be byte-aligned, 2-bytes needs to be 2-byte aligned, etc.

Padding may be inserted to achieve that but that is padding it doesn't change the size of the actual bool, and it isn't part of the bool.

But if you have multiple less-than-a-word fields, they can be packed together.

They will be, if it fits the alignment requirements. Create a struct with 8 bools. It will take up 8 bytes no matter what your packing setting is. They even give an example:

If you specify the default packing size, the size of the structure is 8 bytes. The two bytes occupy the first two bytes of memory, because bytes must align on one-byte boundaries.

They used byte here but it's the same for bool because a bool is one byte.

I'm really surprised how common this misconception is.

this post was submitted on 15 May 2025
1158 points (98.6% liked)

Programmer Humor

23403 readers
1680 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 2 years ago
MODERATORS