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

Programmer Humor

23416 readers
1871 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
 
you are viewing a single comment's thread
view the rest of the comments
[–] brian 1 points 1 day ago (1 children)

c++ guarantees that calls to malloc are aligned https://en.cppreference.com/w/cpp/memory/c/malloc .

you can call malloc(1) ofc, but calling malloc_usable_size(malloc(1)) is giving me 24, so it at least allocated 24 bytes for my 1, plus any tracking overhead

yeah, as I said, in a stack frame. not surprised a compiler packed them into single bytes in the same frame (but I wouldn't be that surprised the other way either), but the system v abi guarantees at least 4 byte alignment of a stack frame on entering a fn, so if you stored a single bool it'll get 3+ extra bytes added on the next fn call.

computers align things. you normally don't have to think about it. Consider this a TIL moment.

[–] timhh 0 points 23 hours ago (1 children)

but calling malloc_usable_size(malloc(1)) is giving me 24, so it at least allocated 24 bytes for my 1, plus any tracking overhead

Indeed. Padding exists. A bool is still one byte.

it’ll get 3+ extra bytes added on the next fn call.

...of padding. Jesus. Are you going to claim that uint16_t is not 2 bytes because it is sometimes followed by padding?

[–] brian 0 points 19 hours ago* (last edited 19 hours ago) (1 children)

a bool is actually a single bit, the rest is all padding

[–] timhh 0 points 18 hours ago (1 children)

It is not. A bool in C, C++, Rust, Go, and every language that I know is 1 byte. Why are you arguing this basic very well known fact so much?

Just say "oh I was mistaken, TIL". It's not shameful.

[–] brian 0 points 18 hours ago

because with things that the compiler does, like padding for alignment, it frequently takes up more space than that. that was my argument the whole time. what til are you talking about? I'm talking about an extra layer you've decided doesn't count. ofc sizeof bool will be a byte in all of those languages.

a bool taking up a single byte is a fantasy that those languages use because developers generally don't need to think about all the other stuff going on.