C/C++;以编程方式获取可用内存
如何使用C/C++程序获取OSX和linux平台中当前的“空闲”内存?在OSX中,我可以通过C/C++;以编程方式获取可用内存,c,memory,C,Memory,如何使用C/C++程序获取OSX和linux平台中当前的“空闲”内存?在OSX中,我可以通过sysctl和sysconflinux系统调用获得“最大”内存量。但是,我不知道如何在运行时获得可用内存。运行时没有可用内存总量这样的东西。由您的进程分配并有效使用的内存很可能以前被另一个进程或仅文件系统缓存使用过,您实际上可以分配和使用比主板上物理可用的内存更多的内存(尽管效率非常低)。Linux和Windows也是如此:所有这些操作系统都使用虚拟内存 您可以依靠系统信息来告诉您有多少物理内存可用(但在
sysctl
和sysconf
linux系统调用获得“最大”内存量。但是,我不知道如何在运行时获得可用内存。运行时没有可用内存总量这样的东西。由您的进程分配并有效使用的内存很可能以前被另一个进程或仅文件系统缓存使用过,您实际上可以分配和使用比主板上物理可用的内存更多的内存(尽管效率非常低)。Linux和Windows也是如此:所有这些操作系统都使用虚拟内存
您可以依靠系统信息来告诉您有多少物理内存可用(但在虚拟机中这可能是假的)。在切换到压缩内存或SDD之前,计算可用内存的数量更为困难,且系统特定,不同版本的操作系统会有所不同
根据经验,使用配置文件或环境变量告诉程序要使用多少内存,并针对特定环境调整该数字:
- 如果您的程序在专用系统上执行,它应该为系统留出足够的内存,以便正常运行,并提供相当数量的磁盘缓存。使用诸如
(Linux)或活动监视器(OS/X)之类的工具查看系统最终使用了多少压缩内存或多少交换,并减少设置以最小化这些top
- 如果您的程序需要与执行其任务的用户共存,则应显著减少此配额,以便为其他任务保留至少一半的可用内存
- 如果您的程序在专用系统上执行,它应该为系统留出足够的内存,以便正常运行,并提供相当数量的磁盘缓存。使用诸如
(Linux)或活动监视器(OS/X)之类的工具查看系统最终使用了多少压缩内存或多少交换,并减少设置以最小化这些top
- 如果您的程序需要与执行其任务的用户共存,则应显著减少此配额,以便为其他任务保留至少一半的可用内存