Question about different ways to declare objects and their effects on RAM usuage

I have related questions. I'm running out of memory and I'm not sure where it is going. All 2K is being used somewhere, presumably in Ethernet header files because I'm declaring less than 200 bytes of variables. I did a serious rework to move a few hundred bytes from RAM to EEPROM and found that I actually lost RAM (other changes may be a cause, so still checking this). Is there documentation somewhere that says where the compiler puts stuff. For example, does the string in return "a string";get stored in RAM or in program memory ? Likewise, where is a const variable stored (and if not in program memory by default, why not?). Do structure definitions use RAM ?

struct example { // should not use RAM 
  int a; 
  char b[30];
};
example c; // uses RAM

Is there a way of getting a RAM allocation map from the compile process ?