title: linux virtual memory user/kernel space split in x86_64
body: <p>From the <code>/proc/cpuinfo</code> we can see that currently Linux only use 48 bit virtual address size. According to the <a href="https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt" rel="nofollow">/Documentation/x86/x86_64/mm.txt</a>, the kernel virtual address begins at ffff800000000000 - ffff80ffffffffff (=40 bits) guard hole. How to understand that? I see that there is a line read <code>hole caused by [48:63] sign extension</code>. Does it mean that kernel will only interpreter the low 48 bit and ignore the high 16 bit when it encounters a virtual address? </p>