[英]Is there an equivalent of sbrk(0) on Windows
我使用sbrk(0)來監視應用程序中動態內存的使用情況。 在程序開始時我做
dynamic_base = sbrk(0);
以及通過程序使用的各種要點
sbrk(0) - dynamic_base
作為當前內存使用高水位的衡量標准。 是否有Windows的等價物?
或者,是否有更好的方法來確定Windows和Unix的進程內的動態內存使用情況。
sbrk
已經過時,即使在Linux上也是如此(例如因為不是多線程友好的)。 幾個malloc實現只使用mmap(2) (其中大多數有時使用mmap
至少足夠大的malloc
-s)。
有沒有更好的方法來確定Linux上的進程內的動態內存使用?
(我正在跳過問題的Windows部分)
在Linux上你可以(並且你會更好)使用proc(5)來查詢你的內存使用情況。 特別是,閱讀(這些是連續的偽文件,有點像管道) /proc/self/stat
, /proc/self/maps
, /proc/self/statm
等。例如, fopen
他們, fscanf
他們, fclose
他們很快。 沒有涉及真正的磁盤IO,因為這些偽文件的內容是由內核根據需要合成的。
還有mallinfo(3)或malloc_stats(3) ,至少對於Linux上的malloc
一些實現。
IInspectable建議的性能計數器將起作用,但它們有點復雜。
如果您只想知道應用程序使用的內存量,請調用GlobalMemoryStatusEx
並檢查結果的ullTotalVirtual
和ullAvailVirtual
成員。
與sbrk
方法不同,這不區分靜態加載的代碼和數據部分,動態加載的模塊,線程堆棧和動態分配(堆)。 但在這個數字的差異將是最大堆大小的差異。
VirtualAlloc是Windows中的粗略等效物。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.