Eli Bendersky's blog. It gets reposted on HN quite often and with very, very good reason. It's an absolute treasure trove of technicalia. I've spent many hours deep in his articles. On all sorts of cool technical topics, like parsers, debuggers, cool language features, abstract math...
And I'm sure I'm not the only frequenter of HN that loves this stuff.
The diagram showing the stack on program entry misses the auxiliary vector[0].
As a sidenote, I find stack diagrams more intuitive (for typical descending stacks) when the low address is drawn at the top. This way it looks like a real-world stack and if you need to represent some data or executable code in the same address space it will appear in natural order, from top to bottom.
Does Linux just map the executable into memory, and then let it load memory fault by memory fault? Or is the entire executable, or some large portion therof, loaded at startup?
As I commented there: http://garrett.damore.org/2014/09/modernizing-less.html
what's worse is that BSS and data pages are faulted in, so just to startup the OS has to page in multiple times, just to read/write those globals that people love so much... It would be much much better to make no use whatsoever of globals (i.e. put everything on the stack in main() )...
And I'm sure I'm not the only frequenter of HN that loves this stuff.