讲师中心 微信公众号
AI工具推荐 视频效率加速

c++如何获取系统的物理内存总量与可用量_跨平台实现【实战】

星伟吖_3324

星伟吖_3324

发布时间:2026-04-10 21:52:34

|

631人浏览过

|

来源于php中文网

原创

GlobalMemoryStatusEx是Windows推荐的获取物理内存信息的API,需初始化MEMORYSTATUSEX结构体的dwLength字段为sizeof(MEMORYSTATUSEX),成功时返回ullTotalPhys和ullAvailPhys(字节),兼容Windows XP SP2及以上系统。

c++如何获取系统的物理内存总量与可用量_跨平台实现【实战】

Windows 下用 GlobalMemoryStatusEx 获取物理内存信息

Windows 提供了 GlobalMemoryStatusEx 这个稳定且兼容性好的 API,能准确返回总物理内存(ullTotalPhys)和当前可用物理内存(ullAvailPhys),单位是字节。它从 Windows XP SP2 开始就支持,现代项目基本可无条件使用。

关键点:必须传入已初始化的 MEMORYSTATUSEX 结构体,且 dwLength 字段要设为 sizeof(MEMORYSTATUSEX),否则函数直接返回 FALSE —— 这是新手最常踩的坑。

示例片段:

C++ 算法竞赛自动化测试数据生成与校验框架
C++ 算法竞赛自动化测试数据生成与校验框架

根据原题生成新题面、验证器及完整测试数据,自动套用 testlib 模板,用于用户要求生成测试数据时。

下载
MEMORYSTATUSEX memInfo;
memInfo.dwLength = sizeof(MEMORYSTATUSEX);
if (GlobalMemoryStatusEx(&memInfo)) {
    uint64_t total = memInfo.ullTotalPhys;   // 总物理内存字节数
    uint64_t avail = memInfo.ullAvailPhys;   // 当前可用物理内存字节数
}

Linux/macOS 用 sysconf 获取 _SC_PHYS_PAGES 和 _SC_AVPHYS_PAGES

POSIX 系统下,sysconf 是最轻量、无需额外权限的方案。_SC_PHYS_PAGES 返回总物理页数,_SC_AVPHYS_PAGES 返回当前可用物理页数,需乘以 sysconf(_SC_PAGESIZE) 才能得到字节数。

立即学习“C++免费学习笔记(深入)”;

注意两个易错细节:

  • sysconf 返回 -1 表示不支持或出错(比如某些容器环境禁用了该接口),不能直接当数值用
  • macOS 的 _SC_AVPHYS_PAGES 实际返回的是「可用用户态物理页」,不含内核保留页,数值通常比 Linux 下略小,但对应用层监控已足够可靠

示例片段:

long pagesize = sysconf(_SC_PAGESIZE);
long total_pages = sysconf(_SC_PHYS_PAGES);
long avail_pages = sysconf(_SC_AVPHYS_PAGES);
if (pagesize > 0 && total_pages > 0 && avail_pages > 0) {
    uint64_t total = static_cast<uint64_t>(total_pages) * pagesize;
    uint64_t avail = static_cast<uint64_t>(avail_pages) * pagesize;
}

跨平台封装时如何避免宏污染与编译分支混乱

不要在头文件里写 #ifdef _WIN32 套一大段实现;把平台逻辑收进 cpp 文件,头文件只暴露统一接口,比如 get_physical_memory_total() 和 get_physical_memory_available(),返回 std::optional<uint64_t> 表示可能失败。

更关键的是:Linux/macOS 下 sysconf 调用开销极低,但 Windows 的 GlobalMemoryStatusEx 是内核调用,虽快但不宜高频轮询(例如每毫秒调一次)。实际业务中,若用于状态面板刷新,建议间隔 ≥500ms。

另外,某些嵌入式 Linux 或容器环境(如 Docker 默认配置)会限制 /proc/meminfo 访问,此时 sysconf 仍可用,而基于文件解析的方案会静默失败——这也是坚持用系统 API 而非读文件的根本原因。

为什么不该解析 /proc/meminfo 或 hostinfo

虽然 /proc/meminfo 看似直观,但字段语义模糊:MemTotal 包含预留给硬件/固件的内存,MemAvailable 是内核 3.14+ 引入的估算值(考虑 page cache 可回收部分),并非严格意义上的“当前可用物理页”。直接解析它会导致跨内核版本行为不一致。

macOS 的 hostinfo 命令输出不稳定(不同版本字段顺序/名称有变),且依赖 shell 调用,无法静态链接,也不适合嵌入式或沙箱环境。

真正需要高精度的场景(比如内存泄漏压测),应以 GlobalMemoryStatusEx 和 sysconf 为准;它们返回的是内核维护的实时计数器,不经过估算或策略干预。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

4074

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

4251

2025.07.04

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3068

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

4369

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3689

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

386

2026.01.19

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3059

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2618

2023.07.27

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

0

2026.09.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Conan 2 Essentials 免费课程
Conan 2 Essentials 免费课程

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 高级依赖模型介绍
Conan 2 高级依赖模型介绍

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn