As we know the EVM provides a key/value store which is a 32-bit(?)byte key pointing to a 32-bit(?)byte value. We can imagine how integers or even strings can be stored there, but the main question is how solidity compiler provide maps, arrays, and structs at the high-level. how does it store complex data types in this storage? is it a standard between compiler and EVM? or can any compiler do it in its own way? or some predefined type in EVM?
Also, is there any datatype defined in EVM? or is it just interpret data types in runtime or something like that?