Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取应用程序占用多少内存的信息?_C++_Boost - Fatal编程技术网

C++ 如何获取应用程序占用多少内存的信息?

C++ 如何获取应用程序占用多少内存的信息?,c++,boost,C++,Boost,所以我需要它跨平台,可能是使用boost,或者至少是windows。那么如何获取应用程序占用多少内存的信息呢?对于Windows,请使用任务管理器;对于Linux,请使用top。如果让操作系统告诉你,而不是在应用程序中猜测,你会感觉更好。对于Windows,使用任务管理器;对于Linux,请使用top。让操作系统告诉您,而不是在应用程序中尝试猜测,这样做会更好。在带有Visual Studio的Windows上,您可以使用函数\u CrtMemDumpStatistics可用于打印有用的统计数据

所以我需要它跨平台,可能是使用boost,或者至少是windows。那么如何获取应用程序占用多少内存的信息呢?

对于Windows,请使用任务管理器;对于Linux,请使用
top
。如果让操作系统告诉你,而不是在应用程序中猜测,你会感觉更好。

对于Windows,使用任务管理器;对于Linux,请使用
top
。让操作系统告诉您,而不是在应用程序中尝试猜测,这样做会更好。

在带有Visual Studio的Windows上,您可以使用函数<代码>\u CrtMemDumpStatistics可用于打印有用的统计数据<代码>\u CrtMemDumpAllObjectsSince列出在检查点之间分配的所有对象。还有更有用的东西,比如内存泄漏检测(
\u crtdumpmomeryleaks
)。还可以使用
\u CrtMemCheckpoint
拍摄快照,并在以后将差异与
\u CrtMemDifference
进行比较

还可以重新定义
new
,以通过CRT调试功能获得更详细的信息

#ifdef _DEBUG
#define new new(_CLIENT_BLOCK, __FILE__, __LINE__)
#endif

注意:这只跟踪CRT分配。要获取整个进程内存信息,您可以在带有Visual Studio的Windows上使用函数<代码>\u CrtMemDumpStatistics可用于打印有用的统计数据<代码>\u CrtMemDumpAllObjectsSince列出在检查点之间分配的所有对象。还有更有用的东西,比如内存泄漏检测(
\u crtdumpmomeryleaks
)。还可以使用
\u CrtMemCheckpoint
拍摄快照,并在以后将差异与
\u CrtMemDifference
进行比较

还可以重新定义
new
,以通过CRT调试功能获得更详细的信息

#ifdef _DEBUG
#define new new(_CLIENT_BLOCK, __FILE__, __LINE__)
#endif
注意:这只跟踪CRT分配。要获取整个进程内存信息,可以使用*NIX上的
GetProcessMemoryInfo

尝试
getrusage()
和Windows上的
GetProcessMemoryInfo()


在*NIX上尝试
getrusage()
,在Windows上尝试
GetProcessMemoryInfo()



我个人喜欢用它来测试我的应用程序的整体性能,这对内存泄漏检测非常有用!如果您正在查找简单的运行时信息,Linux的TOP命令和Windows的任务管理器都非常易于使用。

我个人喜欢使用它来测试我的应用程序的总体性能,这对于内存泄漏检测非常有用!如果您要查找简单的运行时信息,Linux的TOP命令和Windows的任务管理器都非常容易使用。

这是一个无意义的值,它的变化很大,取决于运行的其他进程的数量。只有虚拟内存大小才能说明问题。“X使用了多少RAM”是一个没有答案的问题。进程可以共享内存(例如DLL),内存可以调出,内存可以在进程内分配,但不实际使用RAM或交换,等等。您需要改进您所要求的内容。它的可能重复值是一个无意义的值,其变化很大,取决于运行的其他进程的数量。只有虚拟内存大小才能说明问题。“X使用了多少RAM”是一个没有答案的问题。进程可以共享内存(例如DLL),内存可以调出,内存可以在进程内分配,但不实际使用RAM或交换,等等。您需要改进您的要求。此定义新(_CLIENT_BLOCK,FILE,LINE)的可能重复是未定义的行为。“保留词的重新定义是由C++标准明确禁止的”@ Be'Suyyev:嗯,这就是微软建议做的。也可以将这些参数手动添加到代码中的每一个
,但这将非常痛苦。我认为规则有时会被扭曲。毕竟这只是一个调试测试版本。不需要释放它,它不是便携式的。MSDN对其进行了完美的定义,但ISO没有对其进行定义。但是,请务必理解,它被定义为宏,带有所有相关的污点。例如,它将影响您在类中声明
运算符new
的尝试。此#define new new(_CLIENT_BLOCK,FILE,LINE)是未定义的行为。“保留词的重新定义是由C++标准明确禁止的”@ Be'Suyyev:嗯,这就是微软建议做的。也可以将这些参数手动添加到代码中的每一个
,但这将非常痛苦。我认为规则有时会被扭曲。毕竟这只是一个调试测试版本。不需要释放它,它不是便携式的。MSDN对其进行了完美的定义,但ISO没有对其进行定义。但是,请务必理解,它被定义为宏,带有所有相关的污点。例如,它将影响您在类中声明新的
运算符的尝试。