First, I plan on reading "Understanding the Linux Kernel" by Bovet. This book covers Linux memory management, but just to be sure: does it cover EVERYTHING that I will need to know about how memory is laid out when programs are being run?
EVERYTHING? Unlikely.. however I've heard of the book, and suspect it is a good one and definitely get you started. As always in the computing world though... practice makes perfect and there will inevitably be a situation you haven't read about that only your practice/experience in dealing with complex scenarios can assist with.
Riddle number two: What would be the best source of information for learning the specifics of how gcc translates C code to ASM (besides the gcc manual)?
the GCC manual would be the best source for that information.. though, I must question why you want to know this anyways?
I assume it's because of the ubiquity of gcc in applications/software that people deploy and a desire to improve your reverse-engineering skills.. if this is the case, I'd just say that brushing up on Assembly language is godsend when it comes reverse engineering. Play around with the program STRINGS (and other such tools.. a google search will yield plenty) to get an understand for how things look, and then maybe compile your own (simple) program... enumerate it's assembly and work that way. By doing that you know WHAT the program does, and you can figure out how it is doing it. (Which is knowledge you can then apply in the reverse to 'real' situations.)