Winapi MemoryStatuEx和GlobalMemoryStatuEx

Winapi MemoryStatuEx和GlobalMemoryStatuEx,winapi,win32-process,Winapi,Win32 Process,我使用MemoryStatutex.ullTotalVirtual和MemoryStatutex.ullAvailVirtual之间的差异来显示系统上使用的虚拟内存 如果在我的应用程序执行时,这个数字(两个成员之间的差异)会随着时间不断增加,这是否表示内存泄漏 我对此有点怀疑,但希望能就此提供一些意见 对::SystemTimeToFileTime的多次调用似乎导致此数字随着时间的推移而增加 更新: bool f ( const SYSTEMTIME& sysTime, UINT64*

我使用MemoryStatutex.ullTotalVirtual和MemoryStatutex.ullAvailVirtual之间的差异来显示系统上使用的虚拟内存

如果在我的应用程序执行时,这个数字(两个成员之间的差异)会随着时间不断增加,这是否表示内存泄漏

我对此有点怀疑,但希望能就此提供一些意见

对::SystemTimeToFileTime的多次调用似乎导致此数字随着时间的推移而增加

更新:

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之前(在实际功能中实际上是这样的-我没有直接访问代码的权限,而是通过我的[错误]内存编写的)。谢谢。这正是我所怀疑的。