when a program asks the OS for memory, the OS assigns a chunk of address space, but doesn't assign memory (physical, virtual, or otherwise) until the program actually tries to use it.
not true. the virtual address space is determined at the time of allocation. otherwise the program won't know where it's allowed to write to. only the physical pages are assigned on actual use (and can be swapped, reassigned, etc).