見出し画像

実メモリ量を確認したいと思ったこと

 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

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

よろしければサポートお願いします!いただいたサポートは、クリエイターとしての活動費にいつ買わせていただきます!