C++如何获取程序中指定范围里的内存使用峰值

C++如何获取程序中指定范围里的内存使用峰值,第1张

= GetModuleHandle(_T("bdll")); // 获取bdll句柄

MODULEINFO mi;

GetModuleInformation(NULL, hModule, &mi, sizeof(MODULEINFO)); // 获取bdll信息

// milpBaseOfDll就是bdll的加载起始地址

只要定义了并被链接器使用到的函数,生成可执行的代码就要占用空间,运行期载入内存的代码段和数据段。

POD(plain old data,数据类型中,非class类型以及兼容C的不含成员函数的class/struct类型)的类型定义只是编译期符号替换+静态类型检查,在运行期不会额外占用空间。

class类型中,非多态类(不含虚函数,非虚基类)的成员函数信息通常实现为运行期不占用额外空间。多态类一般为每个类保存一个虚表,实例对象中隐含一个指针指向这个表,以便在运行期确定需要调用的虚函数成员版本。此外关于虚基类可能有虚基类表等实现;以及额外的RTTI信息等;这些空间对程序员是不可见的。

引用有可能被优化掉,成为编译期常量写入代码段中,不额外占用空间。

除此之外的对象(变量、运行期常量,包括类的实例对象)一旦定义,即会在运行期占用空间(如果没被优化掉的话)。

变量所占用的内存空间是堆栈段。

对于运行期常量和全局/静态类型的变量,除非extern,否则一旦生命即自动初始化,对应于进程生成时即分配空间(分别位于常量区和静态区)进程结束以后会被释放。

非静态类型变量中,自动变量在定义时在栈分配空间,生命周期结束后被回收。非自动对象(例如通过new分配空间的)在堆中,需要程序员手动编写代码释放。

====

[原创回答团]

//cpu频率

using MicrosoftWin32;

private int GetCPUFrequency()

{

RegistryKey rk = RegistryLocalMachineOpenSubKey(@"HARDWARE\DESCRIPTION\System\CentralProcessor\0");

object obj = rkGetValue("~MHz");

int CPUFrequency = (int)obj;

return CPUFrequency;

}

//////////////////////////////////

//磁盘空间 Management

using SystemManagement;

private long GetFreeDiskSpace()

{

ManagementObject disk = new ManagementObject(

"win32_logicaldiskdeviceid=\"d:\"");

diskGet();

string totalByte = disk["FreeSpace"]ToString();

long freeDiskSpaceMb = ConvertToInt64(totalbyte)/1024/1024;

return freeDiskSpaceMb;

}

/////////////////////

//内存信息

using System;

using SystemText;

using SystemRuntimeInteropServices;

namespace ConsoleApplication1

{

///// <summary>

/// Summary description for Class1

/// </summary>

class Class1

{

[StructLayout(LayoutKindSequential)]

public struct MEMORY_INFO

{

public uint dwLength;

public uint dwMemoryLoad;

public uint dwTotalPhys;

public uint dwAvailPhys;

public uint dwTotalPageFile;

public uint dwAvailPageFile;

public uint dwTotalVirtual;

public uint dwAvailVirtual;

}

[DllImport("kernel32")]

public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo);

public static int Main(string[] args)

{

Class1 class1 = new Class1();

class1GetMemoryStatus();

return 0;

}

private void GetMemoryStatus()

{

MEMORY_INFO MemInfo;

MemInfo = new MEMORY_INFO();

GlobalMemoryStatus(ref MemInfo);

long totalMb = ConvertToInt64( MemInfodwTotalPhysToString())/1024/1024;

long avaliableMb = ConvertToInt64( MemInfodwAvailPhysToString())/1024/1024;

ConsoleWriteLine( "物理内存共有" + totalMb + " MB");

ConsoleWriteLine( "可使用的物理内存有" + avaliableMb +" MB");

}

}

//////////////////////////////

//cpu名字

using MicrosoftWin32;

private string GetCPUName()

{

RegistryKey rk = RegistryLocalMachineOpenSubKey(@"HARDWARE\DESCRIPTION\System\CentralProcessor\0");

object obj = rkGetValue("ProcessorNameString");

string CPUName = (string)obj;

return CPUNameTrimStart();

}

///////////////////////

//OS版本

using System;

namespace determineOS_CS

{

class Class1

{

static void Main(string[] args)

{

// Get OperatingSystem information from the system namespace

SystemOperatingSystem osInfo =SystemEnvironmentOSVersion;

// Determine the platform

switch(osInfoPlatform)

{

// Platform is Windows 95, Windows 98,

// Windows 98 Second Edition, or Windows Me

case SystemPlatformIDWin32Windows:

switch (osInfoVersionMinor)

{

case 0:

ConsoleWriteLine ("Windows 95");

break;

case 10:

if(osInfoVersionRevisionToString()=="2222A")

ConsoleWriteLine("Windows 98 Second Edition");

else

ConsoleWriteLine("Windows 98");

break;

case 90:

ConsoleWriteLine("Windows Me");

break;

}

break;

// Platform is Windows NT 351, Windows NT 40, Windows 2000,

// or Windows XP

case SystemPlatformIDWin32NT:

switch(osInfoVersionMajor)

{

case 3:

ConsoleWriteLine("Windows NT 351");

break;

case 4:

ConsoleWriteLine("Windows NT 40");

break;

case 5:

if (osInfoVersionMinor==0)

ConsoleWriteLine("Windows 2000");

else

ConsoleWriteLine("Windows XP");

break;

}break;

}

ConsoleReadLine ();

}

}

}

嘎嘎

以上就是关于C++如何获取程序中指定范围里的内存使用峰值全部的内容,包括:C++如何获取程序中指定范围里的内存使用峰值、C++获取指定进程内存空间、c# 如何获取某一个进程的cpu和内存使用情况等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9613492.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存