vs编写的c语言程序有办法检测用了多少内存吗?vc6.0也行。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vs编写的c语言程序有办法检测用了多少内存吗?vc6.0也行。。相关的知识,希望对你有一定的参考价值。

可以用GlobalMemoryStatus()函数实现,示例:


#include <stdio.h>
#include <Windows.h>

int main(int argc, char *argv[])

MEMORYSTATUS memStatus;
GlobalMemoryStatus(&memStatus);
printf("%lu\\n", memStatus.dwTotalPhys / 1024 / 1024);//输出系统内存的总量
printf("%lu\\n", memStatus.dwAvailPhys / 1024 / 1024);//输出系统内存的当前可用量
return 0;

参考技术A http://bbs.chinaunix.net/thread-4101935-1-1.html

使用VS2013编写c++程序时怎样检测内存泄漏

假如在含有以上代码的cpp文件中分配内存后没有进行释放,那么当你停止程序的时候,VisualStudio的Output窗口就会出现提示的信息,可以试着在里面加一句
int* p = new int;
接着调试工程,运行结束后你会看到在Output窗口里会输出1:Detected memory leaks!2:Dumping objects -3:e:\学习\de\de\de.cpp(20) : 290 normal block at 0x004CD7F8, 4 byteslong.4:Data: < CD CD CD CD5:Object dump complete.6:The program
'[11088] de.exe: Native'
has exited with code 0 (0x0).
这是告诉我们在20行有内存泄漏,双击就会跳到相应的代码行!
我试了下用VisualStudio建立的Win32 Console Application和Win32 Project项目,结果都不能检测出内存泄露。
我们将会使用到里面很重要的几个函数。其中最重要的是 _CrtDumpMemoryLeaks使用这个函数,需要包含头文件crtdbg.h
该函数只在Debug版本才有用,当在调试器下运行程序时,_CrtDumpMemoryLeaks 将在“Output(输出)”窗口中显示内存泄漏信息.写段代码试验一下吧,如下:
这个就会在Output窗口输出如下信息:
虽然输出了有内存泄漏,但是无法看出是那里泄漏了,然后下来看看我们的第二个版本的代码:
它会在Output输出:
已经很清楚我告诉我们是在17行产生的。
然后我们把代码修改正确:1:int_tmain(intargc, _TCHAR* argv[])2:3:int* p =newint;4:deletep;5:_CrtDumpMemoryLeaks();6:return0;7:运行后,输出的信息就是正确的了。
所以在写代码的时候除了在产生Dump信息外,最重要的就是在程序退出的时候需要掉用一次_CrtDumpMemoryLeaks();
假如程序有不止一个出口,那么我们就需要在多个地方都调用该函数。
参考技术A 跟踪new,F11一步步进去,有个地方会有lRequest和size,lRequest就是报的那个内存泄露id和size。加上条件断点,重启,大多数情况可以得出结果,有时由于每次启动给对象分配的id会变,也不好抓到。追问

追答

凡是内存泄漏,就是new的内存的没释放。
F11就是调试跟踪。
lRequest就是调试状态下new对象分配的内存id,程序退出后output窗口那个泄露id。size是分配的大小。
条件断点,就是符合一定条件才停下来的断点。
结果就是条件断点激发,调试器暂停。这时候看函数调用堆栈,new函数在哪里,就是哪里内存泄漏。

本回答被提问者和网友采纳
参考技术B 在c++中,少了一个分号就是少了整个程序。。。       参考技术C 我都用智能指针 大型程序都有专门的类来管理追问

怎样用智能指针?STL有智能指针吗?

追答

回复 曌猴未文9 :stl boost都有,不过效率捉急

参考技术D 用带_s的编写就行了,系统会自己检测追问

带_s的是什么?

追答

会自己检测是否泄露比如printf_s

以上是关于vs编写的c语言程序有办法检测用了多少内存吗?vc6.0也行。。的主要内容,如果未能解决你的问题,请参考以下文章

VC6.0或VS2010对图片操作

VS2015安装后占多少内存?是安装啥版本的好?

VS或者VC6.0编写的C语言程序,怎样能够实现串口数据的收发?

VC++中运行C语言一个工程总可以运行多个代码吗?

VS error C2471: 无法更新程序数据库vc90.pdb的解决办法

vc中有dbnavigator控件吗