jos*_*osh 3 c linux memory ubuntu pointers
根据我系统的cpuinfo文件,我系统中的每个处理器都有39位物理地址大小和48位虚拟地址大小.
我的系统有16 GB的RAM,所以39位的物理地址大小对我来说很有意义,因为39位足以满足16GB的ram.
但是,48位虚拟地址大小让我感到困惑.我一直认为我可以编写C程序,从源代码的角度来看,它可以处理2 ^ 64字节的虚拟内存(因为我的系统上的指针根据大小(void*)是8字节长).但是,cpuinfo告诉我,我只有2 ^ 48字节的虚拟内存.那么这是否意味着我的C程序只能处理2 ^ 48字节的虚拟内存?
在64位系统上,指针确实是64位宽.这意味着,指针有2 64个可能的值.
但是,当前的x86-64(AMD64)实现仅使用较低的48位.这意味着只有2 48个实际上可能有效的指针和相当多的指针总是无效的.
目前,AMD64架构定义了一种将48位虚拟地址转换为52位物理地址的机制.用于转换完整64位虚拟地址的机制是保留的,将在未来的AMD64架构规范中进行描述.
| 归档时间: |
|
| 查看次数: |
556 次 |
| 最近记录: |