メモリ使用量を確認するプログラム VC++ / Ruby

#include <iostream>
#include <windows.h>

int main()
{
    std::locale::global(std::locale("japanese"));

    MEMORYSTATUSEX statex;
    statex.dwLength = sizeof(statex);
    if (GlobalMemoryStatusEx(&statex) == 0) //関数が失敗した時
    {
        return 0;
    }

    wprintf(L"物理メモリ(ullTotalPhys)    %15llu bytes\n", statex.ullTotalPhys);
    wprintf(L"物理メモリ(ullAvailPhys)    %15llu bytes\n", statex.ullAvailPhys);
    wprintf(L"仮想メモリ(ullTotalVirtual) %15llu bytes\n", statex.ullTotalVirtual);
    wprintf(L"仮想メモリ(ullAvailVirtual) %15llu bytes\n", statex.ullAvailVirtual);
}
require "fiddle/import"
require 'fiddle/types'

module WIN32API
  extend Fiddle::Importer
  dlload 'C:\\Windows\\System32\\kernel32.dll'
  include Fiddle::Win32Types

  extern 'BOOL GlobalMemoryStatusEx(void *)'

  MEMORYSTATUSEX = struct([
    "unsigned int  dwLength",
    "unsigned int  dwMemoryLoad",
    "unsigned long long ullTotalPhys",
    "unsigned long long ullAvailPhys",
    "unsigned long long ullTotalPageFile",
    "unsigned long long ullAvailPageFile",
    "unsigned long long ullTotalVirtual",
    "unsigned long long ullAvailVirtual",
    "unsigned long long ullAvailExtendedVirtual",
  ])
end

mem = WIN32API::MEMORYSTATUSEX.malloc
mem.dwLength = WIN32API::MEMORYSTATUSEX.size

WIN32API.GlobalMemoryStatusEx(mem.to_ptr)
puts "物理メモリ(ullTotalPhys)     #{"%15d" % mem.ullTotalPhys} byte"
puts "物理メモリ(ullAvailPhys)     #{"%15d" % mem.ullAvailPhys} byte"
puts "仮想メモリ(ullTotalVirtual)  #{"%15d" % mem.ullTotalVirtual} byte"
puts "仮想メモリ(ullAvailVirtual)  #{"%15d" % mem.ullAvailVirtual} byte"
puts "仮想メモリ(ullTotalPageFile) #{"%15d" % mem.ullTotalPageFile} byte"
puts "仮想メモリ(ullAvailPageFile) #{"%15d" % mem.ullAvailPageFile} byte"