• timhh@programming.dev
    link
    fedilink
    arrow-up
    4
    arrow-down
    2
    ·
    6 days ago

    I don’t think so. Apart from dynamically typed languages which need to store the type with the value, it’s always 1 byte, and that doesn’t depend on architecture (excluding ancient or exotic architectures) or optimisation flags.

    Which language/architecture/flags would not store a bool in 1 byte?

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

      things that store it as word size for alignment purposes (most common afaik), things that pack multiple books into one byte (normally only things like bool sequences/structs), etc

      • 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
            ·
            12 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.

    • mmddmm@lemm.ee
      link
      fedilink
      arrow-up
      1
      arrow-down
      1
      ·
      6 days ago

      Apart from dynamically typed languages which need to store the type with the value

      You know that depending on what your code does, the same C that people are talking upthread doesn’t even need to allocate memory to store a variable, right?

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

          I think he’s talking about if a variable only exists in registers. In which case it is the size of a register. But that’s true of everything that gets put in registers. You wouldn’t say uint16_t is word-sized because at some point it gets put into a word-sized register. That’s dumb.