我使用sbrk(0)来监视应用程序中动态内存的使用情况。在程序开始时我做了
dynamic_base = sbrk(0);
以及通过程序使用的各个要点
sbrk(0) - dynamic_base
衡量当前内存使用量的高水位线。是否有Windows的等价物?
或者,是否有更好的方法可以在Windows和Unix的进程中确定动态内存使用情况。
答案 0 :(得分:1)
sbrk
已经过时,即使在Linux上也是如此(例如,因为不是多线程友好的)。几个malloc实现仅使用mmap(2)(其中大多数有时使用mmap
至少足够大malloc
- s)。
是否有更好的方法可以在Linux上的进程中确定动态内存使用情况?
(我正在跳过问题的Windows部分)
在Linux上你可以(而且你会更好)使用proc(5)来查询你的内存使用情况。特别是,阅读(这些是连续的伪文件,有点像管道)/proc/self/stat
,/proc/self/maps
,/proc/self/statm
等。例如,fopen
他们,{{1}他们,fscanf
他们很快。没有涉及真正的磁盘IO,因为这些伪文件的内容是由内核按需合成的。
还有mallinfo(3)或malloc_stats(3),至少对于Linux上的fclose
的某些实现。
答案 1 :(得分:1)
IInspectable建议的性能计数器将起作用,但它们有点复杂。
如果您只想知道应用程序使用的内存量,请致电GlobalMemoryStatusEx
并检查结果的ullTotalVirtual
和ullAvailVirtual
成员。
与sbrk
方法不同,它不区分静态加载的代码和数据部分,动态加载的模块,线程堆栈和动态分配(堆)。但是,此数字中的差异将是最大堆大小的差异。
答案 2 :(得分:0)
VirtualAlloc是Windows中的粗略对等。