When I create a small Mac Mach-O executable, "Hello World" written in C for example, it's about 48k in size, because of alignment padding. Yet at the same time I can define 100k of zero-es in the .bss section (for example by specifying a static array of 100k chars) and it's adding just a few bytes to my executable on disk.
I wonder why the padding(, which only plays a role after being loaded, I suppose) is not also "packed" somehow.