读书人

C/C++怎么获取系统的空余内存

发布时间: 2012-02-05 12:07:15 作者: rapoo

C/C++如何获取系统的空余内存
最近写一个程序需要根据系统某一时刻的空余内存来选择操作,不知道空余内存大小在C/C++环境下如何获得?

[解决办法]
这个需要调用操作系统的API了,Windows平台上可以使用“GetPerformanceInfo”,详查MSDN。
其它平台不太清楚,但一般系统核心编程之类的书上都该有吧。

C/C++标准库中没有这个东西。
[解决办法]
GlobalMemoryStatus( )
This function returns all the information related to the computers present memory into a structure by reference. There is no PowerBuilder equivalent.

Global External Function:
SUBROUTINE GlobalMemoryStatus(ref memory mem2) LIBRARY "Kernel32.dll "

Structure: (Memory)
ulong m_length, ulong m_loaded, ulong m_totalphys, ulong m_availphys, ulong m_totalpagefile, ulong m_availpagefile, ulong m_totalvirtual, ulong m_availvirtual

Script:
memory sysmem
GlobalMemoryStatus(sysmem)
Messagebox( "Memory Length ", string(sysmem.m_length))
Messagebox( "Memory Loaded ", string(sysmem.m_loaded))
Messagebox( "Total Physical Memory ", string(sysmem.m_totalphys))
Messagebox( "Total Available Memory ", string(sysmem.m_availphys))
Messagebox( "Total Page Size ", string(sysmem.m_totalpagefile))
Messagebox( "Available Page Size ", string(sysmem.m_availpagefile))
Messagebox( "Total Virtual Memory ", string(sysmem.m_totalvirtual))
Messagebox( "Available Virtual Memory ", string(sysmem.m_availvirtual))


这个应该和任务管理器得到的信息一致,但是这个事不精确的,进程中申请的内存在释放的时候并不是立即返回给内核的
[解决办法]
这个加快什么速度了?你把1G的文件读到内存实际上也是分成几次内核的IO操作的,既然你的应用不需要保留任何数据,那么你开的buffer大于内核的buffer后就开始成为一种浪费了
[解决办法]
呃,还好问了原始需求。
楼主Google 文件内存映射 吧。
[解决办法]
不太确切...你可以自己作测试的,比较经典的练习,你可以他application的buffer设为不同的值,然后比较读1G文件需要的时间,就会找到速度最快的buffer.

提速是要profile的,不能想当然

读书人网 >C++

热点推荐