C++ 如何得到当前进程所占用的内存呢?

使

使用SDK的PSAPI (Process Status Helper)
中的
BOOL GetProcessMemoryInfo(
  HANDLE Process,
  PPROCESS_MEMORY_COUNTERS ppsmemCounters,
  DWORD cb
);

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;

#include <iostream>
#include 
<windows.h>
#include 
<psapi.h>
#pragma comment(lib,"psapi.lib")
using namespace  std;
void showMemoryInfo(void
)
    {
    HANDLE handle
=
GetCurrentProcess();
    PROCESS_MEMORY_COUNTERS pmc;
    GetProcessMemoryInfo(handle,
&pmc,sizeof
(pmc));
    cout
<<"内存使用:"<<pmc.WorkingSetSize/1000 <<"K/"<<pmc.PeakWorkingSetSize/1000<<"K + "<<pmc.PagefileUsage/1000 <<"K/"<<pmc.PeakPagefileUsage/1000 <<"K"<<
endl;
    }
int main(int argc,char*
 argv)
    {
    showMemoryInfo();
    cout
<<"回收所有可回收的内存"<<
endl;
    EmptyWorkingSet(GetCurrentProcess());
    showMemoryInfo();
    cout
<<"开始动态分配内存"<<
endl;
    
char* buf[5
];
    
for(int i=0;i<sizeof(buf)/sizeof(char*);i++
)
        {
        buf[i]
=new char[102400
];
        showMemoryInfo();
        }
    cout
<<"开始释放内存"<<
endl;
    
for(int i=0;i<sizeof(buf)/sizeof(char*);i++
)
        {
        delete buf[i];
        buf[i]
=
NULL;
        showMemoryInfo();
        }
    cout
<<"回收所有可回收的内存"<<
endl;
    EmptyWorkingSet(GetCurrentProcess());
    showMemoryInfo();
    
return 0
;
    }

输出:
内存使用:1339K/1339K + 356K/356K
回收所有可回收的内存
内存使用:114K/1425K + 356K/356K
开始动态分配内存
内存使用:430K/1425K + 466K/466K
内存使用:438K/1425K + 573K/573K
内存使用:446K/1425K + 679K/679K
内存使用:454K/1425K + 786K/786K
内存使用:462K/1425K + 892K/892K
开始释放内存
内存使用:462K/1425K + 794K/892K
内存使用:454K/1425K + 692K/892K
内存使用:446K/1425K + 589K/892K
内存使用:438K/1425K + 487K/892K
内存使用:425K/1425K + 360K/892K
回收所有可回收的内存
内存使用:110K/1425K + 360K/892K

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 基于C++实现的操作系统进程调度可视化与模拟源码+实验报告.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 欢迎下载,欢迎交流,互相学习进步! 一、实验目的 多道系统进程进程之间存在同步与互斥关系。当就绪进程数大于处理机数时,需按照某种策略决定哪些进程占用处理机。在可变分区管理方式下,采用首次适应算法实现主存空间的分配和回收。 本实验模拟实现处理机调度及内存分配及回收机制,以对处理机调度的工作原理以及内存管理的工作过程进行更深入的了解。 1.实验内容 (1)选择一个调度算法,实现处理机调度; (2)结合(1)实现主存储器空间的分配和回收。 二、需求分析和基本设计思想 1.需求分析 本次处理机调度模拟程序主要分为以下模块: ① 输入模块:在任意时间片可以添加新进程。 ② 挂起模块:在任意时间片可以对内存进程进行挂起,转移至外存。 ③ 运行模块:程序核心模块,从当前就绪队列选取优先级最高的进程运行。当就绪队列存在空闲时从后背队列/解挂程序调取适当程序加入就绪队列;当有进程运行完成时,需释放内存,同时调取合适进程加入就绪队列。 ④ 显示模块:界面设计,显示当前进程信息。 对于进程运行状态,分别设置四个队列进行存储: ready_queue:就绪队列,已分配内存进程。 back_queue:后备队列,由于道数限制等原因未加入内存进程。 suspend_queue:挂起队列,存储挂起进程,位于外存。 unsuspend_queue:解挂队列,但由于道数限制等原因未加入就绪队列。 free_mem_link:储存空闲内存链表。 主要算法选择: 处理机调度:抢占式优先权调度算法; 主存空间的分配和回收:可变分区、首次适应算法。
VC 是 Visual C++ 的简称,可以用来开发 Windows 系统上的应用程序。要获取进程占用内存,可以使用 VC 内存管理函数和系统函数来实现。 首先,可以使用 `GetCurrentProcess` 函数获取当前进程的句柄,然后使用 `GetProcessMemoryInfo` 函数获取有关进程内存信息。这个函数需要传入一个 `PROCESS_MEMORY_COUNTERS` 结构体,并指定其大小。 下面是一个使用 VC 获取进程占用内存的示例代码: ```cpp #include <Windows.h> #include <Psapi.h> int main() { // 获取当前进程句柄 HANDLE hProcess = GetCurrentProcess(); // 定义用于保存内存信息的结构体 PROCESS_MEMORY_COUNTERS pmc; pmc.cb = sizeof(PROCESS_MEMORY_COUNTERS); // 获取进程内存信息 if (GetProcessMemoryInfo(hProcess, &pmc, sizeof(pmc))) { // 获取进程的工作集大小 SIZE_T workingSetSize = pmc.WorkingSetSize; // 输出进程的工作集大小(以字节为单位) printf("进程的工作集大小为:%zu 字节\n", workingSetSize); } // 关闭进程句柄 CloseHandle(hProcess); return 0; } ``` 上述代码首先获取当前进程的句柄,然后定义一个 `PROCESS_MEMORY_COUNTERS` 结构体,并通过 `GetProcessMemoryInfo` 函数获取进程内存信息。最后输出了进程的工作集大小,即占用内存大小。 以上就是使用 VC 获取进程占用内存的方法。通过这种方式,可以方便地获取进程内存情况,便于进行内存管理和性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值