C++得到当前进程所占用的内存

原文地址: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

http://blog.csdn.net/flyingleo1981/article/details/39959387

时间: 2024-08-24 12:42:23

C++得到当前进程所占用的内存的相关文章

一个32位进程可以占用最大内存

这里说的内存是逻辑上的,也就是虚拟的.并不是物理上的内存空间.实际实现逻辑内存的时候如果物理内存不足就用辅存(硬盘).有的人自然要问:既然可以用辅存虚拟,那么每个进程不是想要多大虚拟内存就有多大么?实际不是这样,32位机决定了内存寻址空间最大只能是2的32次方,即4G 如果程序实际需要的内存大于虚拟内存(尽管没有达到4G),windows就会在右下脚出现一个黄色三角形里面有个感叹号.提示虚拟内存不足,要你设置虚拟内存为更大的值.如果不设置,或如你所说硬盘都不足4G就会自动终止进程终止不了就死机了

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 W

利用PowerShell 得到 进程总共占用的内存

$task = tasklist /nh /fo csv $total = 0 for($i=0; $i -lt $task.count; $i++) { $one = $task[ $i ].Split('"').replace(",","")[9].replace(" K","") $total = $total + ([int] $one) } echo ("Total mem usage:{0}MB

mmdrv.exe进程占用大量内存及其他系统资源

收到阿里云的报警说是服务器进程数过多,然后登陆云监控一看,吓了一跳发现服务器的内存,cpu各种上升,登陆查看任务管理器进程出现好多mmdrv.exe进程,仔细寻觅一番才发现是测试工程师在使用Loadrunner做测试(尼玛也不说一声),原来虚惊一场,以下是自己了解的一些Loadrunner: Load Generator 对系统的要求 如果使用进程方式并发,并发10个虚拟用户,则会在任务管理器中出现10个mmdrv.exe进程: 如果使用线程方式并发,并发10个虚拟用户,只会在任务管理器中出现1

Linux下查看某一进程所占用内存的方法

Linux下查看某一个进程所占用的内存,首先可以通过ps命令找到进程id,比如 ps -ef | grep kafka 可以看到kafka这个程序的进程id 可以看到是2913,现在可以使用如下命令查看内存: top -p 2913 这样可以动态实时的看到CPU和内存的占用率,然后按q键回到命令行 也可直接使用ps命令查看: ps -aux | grep kafka 第一个标注的地方是CPU和内存占用率,后面的943100是物理内存使用量,单位是k,此时kafka大约占用943M内存 还可以查看

查看进程占用的内存情况

可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看java用户的进程内存使用情况的话可以使用如下的命令: (1)top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看tomcat用户的进程内存使用情况的话可以使用如下的命令: $ top -u tomcat 内容解释: PID:进程的ID    US

Shell练习-计算一下所有进程所占用内存大小的和

ps 可以查看进程的内存占用大小,写一个脚本计算一下所有进程所占用内存大小的和.(提示,使用ps aux 列出所有进程,过滤出RSS那列,然后求和) #!/bin/bash #Calculate how much memory is occupied by this process #2015/07/22  ps aux |awk -F' ' '{(sum=sum+$6)};END{print sum}'

进程运行时,所占用的内存

一个进程运行时,所占用的内存,可以分为如下几个部分: 1.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等. 2.堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS 回收. 3.全局变量.静态变量:初始化的全局变量和静态变量在一块区域,未初始化的全局变量 和未初始化的静态变量在相邻的另一块区域.程序结束后有系统释放. 4.文字常量:常量字符串就是放在这里的,程序结束后由系统释放. 5.程序代码:存放函数体的二进制代码. 下面我们看一个例子程序:

Linux查看进程内存占用及内存使用情况

LINUX进程内存占用查看方法(1)top可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令:$ top -u oracle (2)pmap可以根据进程查看进程相关信息占用的内存情况,(进程号可以通过ps查看)如下所示:$ pmap -d 14596 (3)ps如下例所示:$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' 其中rsz是是实际内存