• timhh@programming.dev
    link
    fedilink
    arrow-up
    1
    ·
    2 days ago

    things that store it as word size for alignment purposes

    Nope. bools only need to be naturally aligned, so 1 byte.

    If you do

    struct SomeBools {
      bool a;
      bool b;
      bool c;
      bool d;
    };
    

    its 4 bytes.

    • brian@programming.dev
      link
      fedilink
      arrow-up
      1
      ·
      2 days ago

      sure, but if you have a single bool in a stack frame it’s probably going to be more than a byte. on the heap definitely more than a byte

      • timhh@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        15 hours ago

        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.