可能的重复:
为什么 Ubuntu 只显示 3GB 的内存?
前几天买了戴尔XPS 13。安装了 64 位版本的 ubuntu,并将内核更改为:
3.2.0-29-generic #46+kamal5~DellXPS-Ubuntu SMP Sun Jul 29 18:49:08 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
我的系统只能看到 3.2GB (3275MB) 的 4GB 内存。我检查了股票的 ubuntu 内核,情况是一样的。显卡是Intel HD3000。
pmd@daftbook:~$ free -m
total used free shared buffers cached
Mem: 3275 2580 695 0 321 1100
-/+ buffers/cache: 1158 2117
Swap: 2047 0 2047
Run Code Online (Sandbox Code Playgroud)
来自 lshw:
*-memory
description: System Memory
physical id: 4
slot: System board or motherboard
size: 4GiB
*-bank:0
description: DIMM DDR3 Synchronous 1333 MHz (0.8 ns)
product: HT2SCRCH
vendor: Hynix/Hyundai
physical id: 0
serial: 00000000
slot: ChannelA-DIMM0
size: 2GiB
width: 64 bits
clock: 1333MHz (0.8ns)
*-bank:1
description: DIMM DDR3 Synchronous 1333 MHz (0.8 ns)
product: HT2SCRCH
vendor: Hynix/Hyundai
physical id: 1
serial: 00000000
slot: ChannelB-DIMM0
size: 2GiB
width: 64 bits
clock: 1333MHz (0.8ns)
Run Code Online (Sandbox Code Playgroud)
有许多因素会影响显示的可用内存量。先说Windows,然后我们再深入研究Linux。
在 Windows 中,如果您有(无论您有 32 位还是 64 位)X 数量的内存,系统将保留其中的百分之一用于系统的正确运行。根据硬件、集成设备(集成显卡、声卡、网卡等)、连接的设备数量、Windows 版本等,保留的数量会发生变化。在某些情况下,在具有 4GB 内存的 Windows XP 电脑上,您会发现自己只有 3.5GB 可用空间。在其他情况下,您会看到 3.2GB、3.1GB、3.0GB,或者在我见过的最坏情况下,只有 2.8GB。在 Windows 7 上,相同的保留内存量根据硬件和软件的不同而有所不同,从 3.0GB 变为 3.7/3.8GB 可用最大 RAM。可用内存量是您运行的程序所使用的内存量,它是系统计算并保留正确工作所需的内存部分后剩余的内存。
该内存通常不会在用户应用程序和为系统保留的内存之间互换。
在Linux上,也是一样的。系统加载时需要一定量的内存才能使一切顺利运行。如果你有 512MB,系统不会保留太多,因为它会注意到内存不足。如果您有 1GB 或 2GB,则保留的数量会更大。32 位的限制是 4GB,其中保留 200MB 到 1GB 的 RAM(同样取决于硬件或软件),因此一切都可以顺利运行。因此,您的总可用内存将在 3.0GB 到 3.8GB 之间。
现在,除了明显为系统保留的内存之外,还有一些 BIOS/硬件选项实际上可以占用更多内存。最常见的是分配给集成显卡的内存量。它的范围可以从 2MB 到 1.5GB。例如,如果您为显卡分配了 1GB,那么您将不会在总可用内存中看到 1GB。声卡使用少量内存,但它仍然使用内存。网卡、捕获设备、网络摄像头等也是如此......
将它们全部加起来,您就可以得到您使用的常用程序(firefox、gimp、empathy、libreoffice 等)的总可用内存量。
因此,这不是 Ubuntu 在有或没有 64 位系统时是否无法正确读取内存的问题,而是系统是否有足够的内存来正确运行以及足够用户应用程序使用的问题。就您的情况而言,如您所见,Ubuntu 为系统占用了 800MB,为您的应用程序占用了 3.2GB,而无需在进程中共享内存。这将提高应用程序的速度和加载时间,因为它们在内存中拥有自己的用户空间。问题是,如果系统需要的内存量高于您拥有的内存量,并且您想立即打开应用程序。他们必须共享内存,这意味着必须使用交换/虚拟内存,这意味着加载时间更慢。
这是 3GB 笔记本电脑的终端输出:
exodus@exodus:~$ free -m
total used free shared buffers cached
Mem: 2898 1186 1711 0 117 569
-/+ buffers/cache: 499 2398
Swap: 3837 0 3837
Run Code Online (Sandbox Code Playgroud)
正如您从我的示例和您的示例中看到的,不需要共享内存,因为您运行该命令时拥有的内存比您需要的多得多。系统有其内存,应用程序也有其内存。
您还可以看到(在我的示例中使用 Ubuntu 12.04 32 位)系统仅占用大约 120MB。但看这里:
cyrex@cyrex:~$ free -m
total used free shared buffers cached
Mem: 14696 1744 12952 0 447 730
-/+ buffers/cache: 533 3318
Swap: 254 0 254
Run Code Online (Sandbox Code Playgroud)
在本例中,我有 16GB RAM 和 Ubuntu 32 位,系统占用大约 1.5GB。为我的其余应用程序提供了大约 12.5GB 的空间。现在请阅读此处,在 Windows 7 64BIT 的同一系统上,它需要 3.5GB。它总是说当我查看内存剩余 12.4GB 时。因此,根据系统和硬件的不同,保留的金额(或被盗^^)可能会有所不同。
希望这可以帮助。