
実メモリ量を確認したいと思ったこと
Embarcadero C++Builderをいじり始めて20日余りが過ぎました。
長い間、開発から離れていましたが、最近やっと重い腰を上げてみたのです。
先ずは思い出
私が初めて開発の世界に足を踏み入れたのは1996年の春。Borland時代の初代Delphiに触れたのは四半世紀以上も前の事。Microsoft Visual Basicのように簡単にGUIアプリがデザインできて、C言語のようにパワフルだと刷り込まれた記憶がよみがえる。
固定観念はさておき、Embarcadero C++Builderは、Delphiで培われたIDEのよさが、RAD(Rapid Application Development )を体現しているなぁとつくづく思う今日この頃。
なにより、Microsoft Visual C++ よりも、文字列の扱いが非常に楽なため、UI(User Interface)作りでストレスが少なく済むんです。開発効率が(Linux開発において)5倍というのも頷ける。
本題に
さて、能書きはさておき、諸々の事情により、PCに搭載してある実メモリサイズをWindows用の自作アプリケーションに表示したく、いろいろと潜ってみたのでそのことをLoggingします。
分からないことは、とりあえず先生に聞く
Google先生は何でも教えてくれます。知らないことはないのでしょう。ただ、「本当の事を教えてくれるか否か」については自分の責任ですね。
で、検索していくと、Windows APIで実装されていることが分かるので、あとは本家にお邪魔するのみです。
Windows APIのことはMicrosoft Docsで
GlobalMemoryStatusEx function (sysinfoapi.h) - Win32 apps | Microsoft Docs
稚拙なSource codeをお披露目
DWORD GetPhysicalMemorySize() {
MEMORYSTATUSEX memstat;
memstat.dwLength = sizeof(memstat);
if (GlobalMemoryStatusEx(&memstat) == 0) {
//エラーの時は0を返す
return 0;
} else {
//取得時は実メモリサイズをByte単位で返す
return memstat.ullTotalPhys;
}
}
実行結果
結果は成功でした。
ちゃんと取得できました(・・・Windows APIをマニュアル通りにやれば誰でもできる・・・)。
得られた結果を1024で割って、さらに1024で割って、さらに1024で割って得た値を小数点第1位で丸めて得られるようにするとGB単位の値が得られるのですが、それはまた別のお話。
今回の検証環境について
今回の検証に使用した環境を紹介。
DELL XPS 13 2-in-1(7390)
Windows 11 Pro(version 21H2 build 22000.556)
Programming reference for the Win32 API
Embarcadero C++Builder 10.4 Community Edition
いいなと思ったら応援しよう!
