Memory allocation to static variables is done at compile time.
Also, If I start many instances of the same application, will copy of static variables be created for all the instances or single static variable be shared among all instances? I think, copy will be created. But here I have doubt that memory was allocated at compile time and one instance of the application can use that memory, so how other instances will allocate memory to that static variables.
Overall, I have doubt over What does "memory allocation at compile time" actually mean?
You've misunderstood the statement 'memory allocation at compile time'. What is meant by that is that the compiler writes data to the binary that it produces that indicates that the memory should be set aside when the program is loaded by the operating system.
In particular, the field is usually stored in a section in the output file that is called the BSS. The compiler puts the static variable declaration in the BSS, the OS's program loader reads out the BSS section when loading the program, and sets aside enough memory in the freshly created process to store the BSS.
Every time the program is launched, that is every time a new process is created, new memory is set aside for that process. This includes the memory needed for the BSS aka static variables.