簡體   English   中英

在Windows上是否有等效的sbrk(0)

[英]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並檢查結果的ullTotalVirtualullAvailVirtual成員。

sbrk方法不同,這不區分靜態加載的代碼和數據部分,動態加載的模塊,線程堆棧和動態分配(堆)。 但在這個數字的差異將是最大堆大小的差異。

VirtualAlloc是Windows中的粗略等效物。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM