c++ - 以编程方式获取 OS X 上安装的 RAM 量

标签 c++ macos memory iokit

我在一台安装了 8 GB 内存的机器上工作,我试图以编程方式确定机器中安装了多少内存。我已经尝试使用 sysctlbyname() 来获取安装的内存量,但它似乎仅限于返回带符号的 32 位整数。

uint64_t total = 0;
size_t size = sizeof(total);
if( !sysctlbyname("hw.physmem", &total, &size, NULL, 0) )
     m_totalMemory = total;

上面的代码,无论传递给sysctlbyname的是什么类型,总是在total变量中返回2147483648。我一直在通过 IOKit 和 IORegistryExplorer 搜索另一种确定已安装内存的方法,但到目前为止一无所获。我在 IORegistryExplorer 中找到了 IODeviceTree:/memory,但那里没有大小字段。我也没有在 IO Registry 的其他任何地方找到任何东西。有没有办法通过 IOKit 访问此信息,或者有办法让 sysctlbyname 返回超过 32 位有符号整数?

最佳答案

您可以使用 sysctl() 并查询 HW_MEMSIZE。这会将内存大小返回为 64 位整数,而不是默认的 32 位整数。

man page给出了细节。

关于c++ - 以编程方式获取 OS X 上安装的 RAM 量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1396691/

相关文章:

c++ - 如何在 C++ 中声明指向成员函数的指针数组

swift - 如何访问 NSViewController 中的复制粘贴功能

macos - 在Visual Studio Code中仅缩放文本

c - 编译器如何解释 float 和 double 并最终在内存中表示?

java - 每次运行 Java 都会创建一个新的 JVM 实例和一个新的堆吗?

c++ - findHomography、getPerspectiveTransform 和 getAffineTransform

c++ - Qt:打印原始文本

c# - 在编程语言中扩展预增量运算符

macos - 使用Charles Proxy作为代理服务器时无法搜索应用商店

Java - GC一个大字符串