“npm install” in particular is getting me.
- 0 Posts
- 4 Comments
C, C++, C#, to name the main ones. And quite a lot of languages are compiled similarly to these.
To be clear, there’s a lot of caveats to the statement, and it depends on architecture as well, but at the end of the day, it’s rare for a
byte
orbool
to be mapped directly to a single byte in memory.Say, for example, you have this function…
public void Foo() { bool someFlag = false; int counter = 0; ... }
The
someFlag
andcounter
variables are getting allocated on the stack, and (depending on architecture) that probably means each one is aligned to a 32-bit or 64-bit word boundary, since many CPUs require that for whole-word load and store instructions, or only support a stack pointer that increments in whole words. If the function were to have multiplebyte
orbool
variables allocated, it might be able to pack them together, if the CPU supports single-byte load and store instructions, but the nextint
variable that follows might still need some padding space in front of it, so that it aligns on a word boundary.A very similar concept applies to most struct and object implementations. A single
byte
orbool
field within a struct or object will likely result in a whole word being allocated, so that other variables and be word-aligned, or so that the whole object meets some optimal word-aligned size. But if you have multiple less-than-a-word fields, they can be packed together. C# does this, for sure, and has some mechanisms by which you can customize field packing.
It’s far more often stored in a word, so 32-64 bytes, depending on the target architecture. At least in most languages.
Alternative image for C: Mr. Incredible: “A PARAMETER IS A PARAMETER!”