我想知道进程在其工作期间分配的最大堆数量。
mallinfo()
为我提供了当前分配的内存量。所以,我可以在单独的线程中经常询问allinfo()
并存储最大值。
但是,也许,有关进程的这些信息会写在系统的某个地方?首先,我对Windows感兴趣。
答案 0 :(得分:1)
不,系统中没有地方可以跟踪进程自启动以来所使用的最大堆内存量。
答案 1 :(得分:1)
如果仅用于分析,则可以使用分析工具,例如valgrind的massif。我不知道Windows有什么工具,但肯定有。
答案 2 :(得分:0)
对于MS-Windows,您希望使用GetProcessMemoryInfo()功能。这为您提供了各种尺寸的结构。你会想测试一下,看看你们自己有什么用,但我认为它有很好的记录。
您将获得如下所示的结构:
typedef struct _PROCESS_MEMORY_COUNTERS {
DWORD cb;
DWORD PageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
} PROCESS_MEMORY_COUNTERS, *PPROCESS_MEMORY_COUNTERS;
对于Linux,此时有一个转义我的界面,但您也可以在流程的状态文件中找到该信息。因此,从进程本身,您执行getpid()并从中读取状态文件:
std::string status_filename("/proc/" + std::to_string(getpid()) + "/status");
std::ifstream status(status_filename, std::ios::in);
... // read file 'status'
以Vm
开头的行是您感兴趣的行。例如,VmPeak
将告诉您进程使用的最大内存量。
更多关于Linux下Runtime Memory Measurement的内容。