According to my system's cpuinfo file, each processor in my system has a 39 bit physical address size and a 48 bit virtual address size.
My system has 16 GB of ram, so the 39 bit physical address size makes sense to me as 39 bits is more than enough to address 16GB of ram.
However, the 48 bit virtual address size confuses me. I always believed that I could write C programs that, from the source code's perspective, could address 2^64 bytes of virtual memory (as a pointer on my system is 8 bytes long according to size(void *)). However, cpuinfo is telling me that I only have 2^48 bytes of virtual memory. So does that mean my C program can only address 2^48 bytes of virtual memory?