1. The address assigned by Compiler is virtual address. Why? because compiler definitely has no way to decide the physical memory address ahead of running the program.
2. My understanding of the process of visiting phycial memory of an application is: The exe or dll that contains virtual address allocation done inside now is generated. After loading it to be a process, the running part will be loaded into physical memory and the mapping of this part's code and data between virtual address and physical memory address will be built. Then when intructions are run in CPU, for example, when trying to get some data from a address(Note: virtual address here because in the compiled code there is no physical address), firstly the virtual address of the data will be mapped to phycial address, and then the data can be retrived there.
updating... >>>>>