0

0

C++如何读取系统显卡显存大小?(OpenGL或Direct3D查询)

冰火之心

冰火之心

发布时间:2026-02-19 15:34:03

|

754人浏览过

|

来源于php中文网

原创

windows下用dxgi查询显存最可靠,通过idxgiadapter::getdesc获取dedicatedvideomemory字段;linux/macos无统一方案,opengl扩展不可靠,macos无公开接口。

c++如何读取系统显卡显存大小?(opengl或direct3d查询)

Windows 下用 DXGI 查询显存大小最可靠

Direct3D 11/12 的 DXGI 接口是 Windows 平台获取显存容量最稳定的方式,它绕过了驱动层差异,直接读取 GPU 设备的 IDXGIAdapter 属性。OpenGL 没有标准 API 获取显存总量,glGetString(GL_VENDOR) 或扩展如 GL_ATI_meminfo 都不通用,Linux/macOS 更无统一方案。

实操建议:

  • 必须初始化 COM(CoinitializeEx(nullptr, COINIT_APARTMENTTHREADED)),否则 CreateDXGIFactory1 失败
  • 遍历 IDXGIAdapter 时,跳过软件渲染器(检查 Description.VendorId != 0x1414
  • 显存分“专用显存”(dedicated video memory)和“共享系统内存”(shared system memory),关键字段是 DedicatedVideoMemorySharedSystemMemory
  • 示例关键代码:
    IDXGIFactory1* factory;
    CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)&factory);
    IDXGIAdapter* adapter;
    factory->EnumAdapters(0, &adapter); // 第一块独显
    DXGI_ADAPTER_DESC desc;
    adapter->GetDesc(&desc);
    // desc.DedicatedVideoMemory 即专用显存字节数

Linux 上只能靠 /sys/class/drm 推断,且不准

Linux 没有内核级 GPU 显存报告机制,NVIDIA 驱动不暴露总显存,AMDGPU 和 Intel i915 只在 /sys/class/drm/card0/device/mem_info_vram_total 等路径提供近似值,但该值常为 0 或仅反映当前分配量,不是硬件规格。

常见错误现象:

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

Ink For All
Ink For All

AI写作和营销助手,精心设计的 UI

下载
  • /sys/class/drm/card0/device/mem_info_vram_total 返回 0 —— 这不是 bug,是驱动未实现或权限不足
  • 误把 /proc/meminfo 里的 MemTotal 当显存 —— 完全无关
  • nvidia-smi --query-gpu=memory.total 得到的是当前可见显存,受 ECC、预留 BIOS 内存影响,比标称值小 10%~20%

OpenGL 扩展不可靠,别依赖 GL_NVX_gpu_memory_info

这个 NVIDIA 扩展返回的是当前可用显存,不是总容量,且只在部分驱动版本中启用;AMD 的 GL_ATI_meminfo 已废弃,Intel 完全不支持。调用 glGetIntegerv 前必须确认扩展存在,否则触发 GL_INVALID_ENUM 错误。

使用场景限制:

  • 仅适合做运行时显存水位监控,不能用于初始化资源预算
  • GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 返回值单位是 KB,但实际是估算值,误差可达 ±512MB
  • 跨平台项目若强制启用该扩展,Linux/macOS 下会静默失败,glGetError() 返回 0,但变量未赋值

macOS 完全没公开接口,连 hack 都难

Apple 从 macOS 10.15 开始移除了 IORegistryEntryCreateCFProperty 对 GPU 显存节点的访问权限,MTLCopyAllDevices 只返回设备型号,不包含内存信息。第三方工具如 system_profiler SPDisplaysDataType 是解析 GUI 配置文件,非实时硬件读取。

能做的只有:

  • system_profiler 输出并 parse(不稳定,格式随系统版本变)
  • 硬编码常见机型显存值(如 MacBook Pro M3 Max = 48GB,但仅限 Apple Silicon)
  • 放弃获取,改用运行时试探性分配 + MTLCommandBufferStatusError 回退

显存大小不是固定值:集成显卡共享内存可变,独显可能被 BIOS 截留一部分,Windows 上还受“Reserve video memory”设置影响。真要算资源上限,不如测 vkGetPhysicalDeviceMemoryPropertiesdeviceLocal heap size(Vulkan),它至少是驱动承认的可用总量。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

1529

2023.10.19

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

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

423

2025.10.17

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

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

2260

2025.12.29

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

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

37

2026.01.19

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

645

2024.01.03

python中class的含义
python中class的含义

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

21

2025.12.06

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

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

1183

2023.07.26

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

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

1150

2023.07.27

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

660

2026.02.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 5.8万人学习

CSS教程
CSS教程

共754课时 | 33.6万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.2万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号