From some time now, I have searched and read a lot about memory alignment, how it work and how to use it. The most relevant article I have find for now is [this one][1].

But even with that I still have some questions about it:

 1. Out of embedded system, we often have huge chunk of memory in our computer that make memory management a lot less critic, I am completly into optimization, but now, is it really something that can make the difference if we compare the same program with or without it's memory rearranged and aligned?
 2. Is memory alignment have other advantages? I read somewhere that CPU work better/faster with aligned memory because that take it less instructions to process (if one of you have a link for an article/benchmark about it?), in that case, is the difference really significant? Is there more advantages than these two? 
 3. In the article link, at chapter 5, the author say:
 > Beware: in C++, classes that look like structs may break this rule! (Whether they do or not depends on how base classes and virtual member functions are implemented, and varies by compiler.)

  Have you any idea of how memory alignment work exactly in C++ since it seem to have some differences?
 4. Is there any tool that can help to view how much memory a program (or even a single function) take? Or is the "best" way to have that information is to work with the windows process manager/top, valgrind, using sizeof() or maybe even gprof (not sure if this one track memory too?)

Thanks in advance for your time and answers.
[1]: http://www.catb.org/esr/structure-packing/