64ビットWindowsで空きメモリを表示してみる...または、拡張 import の使用

 以前、newLISP で空きメモリも表示したことがありますが、32ビットの頃の話。
 Windows8 を 64ビット にしたので、GlobalMemoryStatus では、正常な値が取れません。GlobalMemoryStatusEx を使う必要があります。
 そこで、拡張importstruct の出番です(笑)。

(import  "kernel32.dll" "GlobalMemoryStatusEx" "long" "void*")
(struct 'MEMORYSTATUSEX "long" "long" "long long" "long long" "long long" "long long" "long long" "long long" "long long")
;(setq ptrEx (append "64" (chop (dup "00" (* 8 8)))))
(setq ptrEx (pack MEMORYSTATUSEX '(64 0 0 0 0 0 0 0 0)))

 こんな感じで GlobalMemoryStatusEx を準備します。
 変数ptrEx の先頭に64を設定している理由は、MEMORYSTATUSEXdwLength に説明があります。要するに入れておけということ。GlobalMemoryStatus では必要ないのですが、、、
 こうしておけば、

(GlobalMemoryStatusEx ptrEx)
(unpack MEMORYSTATUSEX ptrEx)

 の実行で、

(64 15 8254586880 6973407232 9529655296 8148525056 2147352576 2128674816 0)

 こんな風に必要なデータがリストで得られます。簡単、簡単(笑)。
 リストの中身はこちらを参照して下さい。
 ちなみに空きメモリは

((unpack MEMORYSTATUSEX ptrEx) 3)

 です。
 以上如何でしょうか。

P.S.
 開発版の newLISP 10.4.7 に 64-bit Windows の記述があります。
 次の安定版で登場するかも。
 まっ、64ビットWindows8 でも 32ビット版newLISP で間に合ってますけどね(笑)。

No comments yet

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。