以编程方式获取Windows中的可用RAM?

时间:2011-02-17 16:39:30

标签: c windows memory-management

全部,       这里需要一些帮助。我来自纯粹的Java背景,对C编程知之甚少。基本上我需要编写一个C程序(并创建一个可执行文件),它将在Windows机器上输出自由字节数(RAM)(XP / 2008/7)

我对它进行了一些研究,发现有一个名为GlobalMemoryStatusEx的函数,还有一个链接: http://msdn.microsoft.com/en-us/library/aa366589(v=vs.85).aspx

我已经用gcc安装了cygwin,上面的程序甚至都没有为我编译。我知道我在做一些愚蠢的事情......

$ gcc hello.c -o hello.exe
hello.c:3:19: error: tchar.h: No such file or directory
hello.c: In function `main':
hello.c:7: error: `MEMORYSTATUSEX' undeclared (first use in this function)
hello.c:7: error: (Each undeclared identifier is reported only once
hello.c:7: error: for each function it appears in.)
hello.c:7: error: expected `;' before `statex'
hello.c:9: error: `statex' undeclared (first use in this function)

非常感谢任何帮助!

6 个答案:

答案 0 :(得分:5)

正如larsmans所说,cygwin不是Windows本机编译器。除了MinGW,您还可以考虑Visual C++ 2010 Express

答案 1 :(得分:3)

Cygwin默认在Windows上模拟Unix API,而不是呈现Windows API。

使用MinGW软件包可能会取得更大成功,该软件包是适用于Windows + Windows API的GCC。

答案 2 :(得分:3)

如果您不熟悉C,并且您想要做的就是为Windows编写这个小程序,您可能会发现开始使用免费Visual C++ Express更容易。有可能MSDN示例将开箱即用。

编辑:您提到了Java,但目前还不完全清楚是否要从Java调用此C应用程序的唯一目的。如果是的话,我想我会提到一些名为JNative的东西。它似乎是一个纯Java库,其中包含a wrapper for GlobalMemoryStatusEx。请注意,我通过Google搜索找到了JNative,但我自己没有使用它。

答案 3 :(得分:2)

您引用的函数是Windows API函数,这意味着您无法从cygwin调用该函数,cygwin是Windows上的POSIX仿真层。

此时您有几个选择:

  1. 您可以免费下载并安装Windows SDK,其中包括Visual Studio C / C ++编译器。
  2. 您可以免费下载Visual C++ Express Edition的副本。
  3. 如果您是学生,您可以从MSDNAA(由您的大学提供)或DreamSpark获得Visual Studio 2010的完整副本。
  4. 您可以购买Visual Studio的完整副本。
  5. 您可以下载并安装MinGW,这是移植到Windows的GCC编译器。
  6. 请注意,所有Microsoft编译器都支持整个Win32 API。 MinGW在Windows上对Unicode的处理是有限的,它不支持COM(因此,如果你想调用COM API,这很麻烦),并且它不包括Windows SDK附带的所有头文件。

    GCC是一个很棒的编译器,它在Windows支持方面并不是那么好。

答案 4 :(得分:1)

所提供的答案是正确的,但我不认为他们能够正确解释问题。

Unix和类Unix操作系统努力遵循名为POSIX的标准API。 Windpws不符合POSIX。 Cygwin是为在Windows上提供POSIX合规性而编写的。因此,当您在Cygwin上编译时,您正在编译POSIX API,而不是Windows API。您在MSDN上找到的功能在POSIX中不存在。所以,你得到编译错误。

MinGW是gcc移植到Windows。它知道Windows API的正确包含。 Visual Studio的nmake在这方面是相同的(提供对Win API的访问)。

答案 5 :(得分:1)

要使用cygwin gcc使用Win32 API编译程序,您需要mingw-i686-headers包(包括tchar.h等头文件。)

然后,您可能还需要define some macros to enable newer APIs