
= 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和内存使用情况等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)