Winapi MemoryStatuEx和GlobalMemoryStatuEx
我使用MemoryStatutex.ullTotalVirtual和MemoryStatutex.ullAvailVirtual之间的差异来显示系统上使用的虚拟内存 如果在我的应用程序执行时,这个数字(两个成员之间的差异)会随着时间不断增加,这是否表示内存泄漏 我对此有点怀疑,但希望能就此提供一些意见 对::SystemTimeToFileTime的多次调用似乎导致此数字随着时间的推移而增加 更新:Winapi MemoryStatuEx和GlobalMemoryStatuEx,winapi,win32-process,Winapi,Win32 Process,我使用MemoryStatutex.ullTotalVirtual和MemoryStatutex.ullAvailVirtual之间的差异来显示系统上使用的虚拟内存 如果在我的应用程序执行时,这个数字(两个成员之间的差异)会随着时间不断增加,这是否表示内存泄漏 我对此有点怀疑,但希望能就此提供一些意见 对::SystemTimeToFileTime的多次调用似乎导致此数字随着时间的推移而增加 更新: bool f ( const SYSTEMTIME& sysTime, UINT64*
bool f ( const SYSTEMTIME& sysTime, UINT64* localTime )
{
FILETIME f;
if ( !SystemTimeToFileTime ( sysTime, &f ) )
return ( false );
*localTime = ( static_cast < UINT64 > ( f.dwHighDateTime ) << 32 ) | f.dwLowDateTime;
return ( true );
}
bool f(常量系统时间和系统时间,UINT64*本地时间)
{
文件时间f;
if(!SystemTimeToFileTime(sysTime和f))
返回(假);
*localTime=(static_cast(f.dwHighDateTime)问题在程序中的其他地方。以下程序(包括对f
函数的错误修复)反复显示相同的值,无论运行多长时间
#include <windows.h>
#include <stdio.h>
bool f ( const SYSTEMTIME& sysTime, UINT64* localTime )
{
FILETIME f;
if ( !SystemTimeToFileTime ( &sysTime, &f ) )
return ( false );
*localTime = ( static_cast < UINT64 > ( f.dwHighDateTime ) << 32 ) | f.dwLowDateTime;
return ( true );
}
int __cdecl main(int, char**)
{
SYSTEMTIME st;
GetSystemTime(&st);
for (;;) {
UINT64 result;
for (int i = 0; i < 10000000; i++) f(st, &result);
MEMORYSTATUSEX info = { sizeof(info) };
GlobalMemoryStatusEx(&info);
printf("%I64d\n", info.ullTotalVirtual - info.ullAvailVirtual);
}
}
#包括
#包括
bool f(常量系统时间和系统时间,UINT64*本地时间)
{
文件时间f;
如果(!SystemTimeToFileTime(&sysTime,&f))
返回(假);
*localTime=(static_cast(f.dwHighDateTime)不,这没有泄漏的迹象。SystemTimeToFileTime不能泄漏。那么,为什么该函数会导致进程“hog”虚拟内存。瞧,这说明了什么?我怀疑它会占用内存。如果您需要详细的帮助,请显示您的代码。哦,是的,很抱歉忘记了&在sysTime之前(在实际功能中实际上是这样的-我没有直接访问代码的权限,而是通过我的[错误]内存编写的)。谢谢。这正是我所怀疑的。