所谓的内存释放工具——原理
来源:互联网 发布:日本手表海淘 知乎 编辑:程序博客网 时间:2024/06/16 13:29
刚才逆向了一个内存释放的小工具,原来是调用了SetProcessWorkingSetSize()函数,MSDN一下。
此函数原型如下:
HANDLE hProcess,
SIZE_T dwMinimumWorkingSetSize,
SIZE_T dwMaximumWorkingSetSize
);
hProcess是进程的句柄,dwMinimumWorkingSetSize和dwMaximumWorkingSetSize分别是设置程序运行空间的最小和最大空间。
其实这个函数的功能就是保留一些必要的代码在内存中运行,其余的直接扔虚拟内存里去了。所谓虚拟内存,其实就是硬盘中划分出来的一片区域用来作内存使用。不过,这个只是暂时性地放进虚拟内存里,一旦程序激活了,内存又会被重新占用。其实这个特性操作系统本身就有的,可以先打开任务管理器,观察某个进程,如果将其窗口最小化后,所占用内存一下子就减小了;一旦被激活,又要开始重新对内存进行占用,这就是所谓的后台运行。
所以事实上并没有节约多少内存,一切都是骗眼睛的,这样做反而增加了内存与硬盘的页面交换频率,硬盘的针就转得更快了,有时反而更降低系统的性能。
贴一段代码:
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
/*
time : 2010.5.9
by : 乱雪
email: lx#shellcodes.org
SetProcessWorkingSetSize函数演示
*/
int main()
{
PROCESSENTRY32 pentry = {sizeof(pentry)}; //填充大小
HANDLE hPSnap =::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //建立快照
BOOL bMore = ::Process32First(hPSnap,&pentry); //得到首个进程
//循环搜索
while(bMore)
{
if(strcmp("QQ.exe",pentry.szExeFile) == NULL) //搜索QQ.exe这个进程
{
//如果找到,就用OpenProcess获得它的句柄
//根据MSDN对SetProcessWorkingSetSize的描述,进程必须有PROCESS_SET_QUOTA权限
HANDLE hProcess = ::OpenProcess(PROCESS_SET_QUOTA,
FALSE,
pentry.th32ProcessID);
//hProcess不为空就表明获得了句柄值
if(hProcess != NULL)
//调用SetProcessWorkingSetSize函数
::SetProcessWorkingSetSize(hProcess, -1, -1);
else
break;
}
bMore = ::Process32Next(hPSnap,&pentry); //获得下一个进程
}
::CloseHandle(hPSnap); //关闭句柄
return 0;
}
这段代码演示了对QQ进程(QQ.exe)的进程释放。首先建立一个进程快照,然后开始搜索QQ.exe这个进程,如果找到了就打开它的句柄,然后进行内存释放。
如图,在释放前QQ进程所占的内存大小:
编译运行后,QQ.exe所占用的内存大小,如图:
就这回事儿,晕。
PS:真的很简单 但是没什么大用处。。。。只能骗骗不知道的人了~~~
- 所谓的内存释放工具——原理
- 所谓的内存释放工具——原理
- 操作系统的内存释放原理
- 所谓的 内存对齐
- C#内存释放 原理
- malloc内存分配与free内存释放的原理
- Linux下内存释放问题相关知识续——手动释放内存的伪命题
- Python 内存不释放原理
- python内存不释放原理
- Python 内存不释放原理
- IOS内存管理--自动释放池的实现原理
- 内存泄露解决记录——BSTR字符串释放与VARIANT类型的释放
- Sharepoint习题——内存对象的释放
- 学习opencv——乱释放内存的Bug,IplImage
- C++离航篇——内存的申请释放
- HDU 1761—简单的字典树,需要释放内存
- Learning Python 017 — Python2 和 Python3 的内存释放
- execvp族的示例—所谓旧瓶装新酒
- S3C2440 之USB设备篇
- TcpWrappers
- QT 基于mplayer媒体播放器
- Manual:RESTful Web Services (Chinese)
- java 异常处理
- 所谓的内存释放工具——原理
- 飞鸽传书是企业网络营销管理专家
- 【转】素数总结
- (百度转)感抗 容抗
- [转]4岁儿童的教育方法
- 马太效应
- [转]4岁孩子的教育应该注意些什么
- 一个关于姿势识别的总结
- 【转】4岁儿童的心理特征