Static class members are treated almost exactly like global variables / functions. Because they are not tied to an instance, there is nothing to discuss regarding memory layout.
Class member variables are duplicated for each instance as you can imagine, as each instance can have its own unique values for every member variable.
Class member functions only exist once in a code segment in memory. At a low level, they are just like normal global functions but they receive a pointer to this
. With Visual Studio on x86, it's via ecx
register using thiscall calling convention.
When talking about virtual functions, polymorphism, then the memory layout gets more complicated, introducing a "vtable" which is basically a bunch of function pointers that define the topography of the class instance.