使用C ++查找RAM量

时间:2010-10-22 21:27:34

标签: c++ linux memory winapi

我如何找出RAM的数量和我的系统的详细信息,如CPU类型,速度,可用的物理内存量。 RAM中的堆栈和堆内存量,运行的进程数。

此外,如何确定是否有任何方法可以确定计算机执行指令需要多长时间,从内存中获取一个字(有和没有缓存未命中),从磁盘读取连续的字,并寻求一个新的在磁盘上的位置。


编辑:我想在我的linux系统上使用g ++编译器完成此操作。有没有任何inbulit功能...?还告诉我,如果在Windows系统上可以做这些事情。

当我在c ++中学习一些内存管理时,我出于好奇而得到了这个问题。请指导我逐步完成这一步骤,或者可能是在线教程,我会做得很好。谢谢。

3 个答案:

答案 0 :(得分:4)

对于Windows - GetPhysicallyInstalledSystemMemory表示已安装的RAM,GetSystemInfo表示CPU,Process Status API表示进程枚举。堆和堆栈的使用只能由本身的本地进程获得。记住堆栈使用是按线程的,在Windows中,进程可以有多个堆(使用GetProcessHeaps枚举它们)。可以使用GetProcessMemoryInfo为每个流程检索外部可见使用情况下每个流程的内存使用情况。

我不知道第二段列表的Win32 API。可能必须在设备驱动程序级别(内核模式)执行此操作,我认为,如果它甚至可能。取指令和 执行取决于处理器,缓存大小和指令本身(它们的复杂性并不完全相同)。内存访问速度取决于RAM,CPU和主板FSB速度。磁盘访问同样完全取决于系统特性。

答案 1 :(得分:3)

使用Linux和GCC,您可以使用sysconf标题中包含的<unistd.h>功能。

您可以传递各种参数来获取硬件信息。例如,要获得机器中物理RAM的数量,您需要执行以下操作:

sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE);

有关所有可能的用法,请参阅man page

您可以使用getrlimit系统调用以及使用<sys/resource.h>标头包含的RLIMIT_STACK参数来获取进程的最大堆栈大小。

要了解当前计算机上正在运行的进程数,您可以检查/proc目录。每个正在运行的进程都表示为此目录中的文件,该文件由进程ID号命名。

答案 2 :(得分:0)

在Windows Vista和Windows 7上,Windows System Assessment Tool可以提供大量信息。据推测,它可以通过WEI API以编程方式访问。