Non sono né un programmatore esperto, né ho mai programmato "seriamente" in assembly, però penso che qualcosa possa dire nel risponderti.
1/2) Non ho ancora mai fatto intensive ottimizzazioni low-level, e per questo non so veramente molto quello che succede nel compilatore. Una cosa di cui mi preoccupavo molto, e che a pensarlo ora ovviamente è stupida, è che dichiaravo sempre dove possibile le variabili dello stack con il minor numero di byte size possibile (contatori di 1 byte nei for, massimo 2 byte per le altre variabil), per poi scoprire che tanto il compilatore per fattori di alignment e calcolo comunque minimo mi alloca 4 byte sempre e comunque (o che comunque passa al prossimo multiplo di 4).
Ti consiglio di vederti i video della CppCon, li trovi qui su youtube:
https://www.youtube.com/user/CppCon/video . Molti video si concentrano sull'ottimizzazione, anche "micro", dal punto di vista di cache, ALU, branch-prediction, etc... (alcuni commentano e discutono anche sul codice assembly generato). Ti consiglio soprattutto i talk e presentazioni (anche non della CppCon) di Andrei Alexandrescu, è veramente bravo, spiega chiaramente concetti e ottimizzazioni complicate, ed è anche molto simpatico (ogni tanto mi rivedo il suo talk sui std::allocator non per ripasso dei concetti ma per ridere di come prende in giro lo standard c++/programmatori delle librerie ).
Ovviamente se vai su google troverai a migliaia di thread/blog dove programmatori discutono su ottimizzazioni e strutture dati ottimali.
Voglio poi condividere con te (e con anche gli altri utenti del forum) questa piccola perla:
https://gcc.godbolt.org . Compilatore C++ che mostra il codice generato, tutto sul browser, e si può personalizzare con il compilatore desiderato e anche con i suoi parametri. Spesso lo ho usato per curiosità per vedere come funziona e vengono implementate certe feature del c++ (virtual class, exception, ...)