• 0 Posts
  • 15 Comments
Joined 27 days ago
cake
Cake day: May 12th, 2025

help-circle



  • 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?


  • Wrong again. It depends on the CPU. They can absolutely read a single byte and they will do if you’re reading from non-idempotent memory.

    If you’re reading from idempotent memory they won’t read a byte or a word. They’ll likely read a whole cache line (usually 64 bytes).

    And if you read the ARM article you linked, it literally says so.

    Where?

    Thus any compiler worth their salt will align all byte variables to words for faster memory access.

    No they won’t because it isn’t faster. The CPU will read the whole cache line that contains the byte.

    RTFM

    Well, I would but no manual says that because it’s wrong!


  • but if you have a single bool in a stack frame it’s probably going to be more than a byte.

    Nope. - if you can’t read RISC-V assembly, look at these lines

            sb      a5,-17(s0)
    ...
            sb      a5,-18(s0)
    ...
            sb      a5,-19(s0)
    ...
    

    That is it storing the bools in single bytes. Also I only used RISC-V because I’m way more familiar with it than x86, but it will do the same thing.

    on the heap definitely more than a byte

    Nope, you can happily malloc(1) and store a bool in it, or malloc(4) and store 4 bools in it. A bool is 1 byte. Consider this a TIL moment.