ティアのホームページ☆ミ:ID 254:タイトル それはそうかもしれないんだけど oC
no prev page 1/1ページ(1件) no next page
To Close..それはそうかもしれないんだけど 2008年12月17日14時24分
プログラムを作る際に、いろいろ気にするのが、メモリの利用方法

メモリは、スタックやら、グローバルやら、ヒープやら、バーチャルやらいろいろあります。

でも、これまで速度をあまり重視していなかったのと、容量的な問題を考慮するのがやだったので、常にGlobalAllocを利用していたのですが・・・
実はこのGlobalAllocはメモリの残量に関係なく、使用回数制限的な面がありました。

これは、先日作っていた、とあるプログラムで、大量のデータを読み書きして、その結果を出力する、ただそれだけのプログラムだったのですが、
あらゆるメモリを動的に確保しようとした結果、それぞれにメモリオブジェクトを大量に作成することになり
このメモリオブジェクトがGlobalAllocを利用していたために、GlobalAllocが半端じゃなく増加し、メモリは全然余裕で余っているにもかかわらずGlobalAlloc自体が失敗するという状況に陥りました。(小さいデータが大量にあったのです)

これはも〜、しばらくなかなか気がつかなかったのですが、
Windowsで利用できるハンドル数に上限があるのですから、どれもそれもいつかは上限に到達するわけです。

そこで、ハンドルを利用しないメモリの確保方法で、
サイズを自由に変更ができ、操作が楽なものを探した結果、ヒープ領域を利用することにしました。

これはGlobalAllocとGlobalLockをがHeapAllocにまと待ったような仕様で、命令が減りはしても、増えることはないという

はじめからこの方が楽だったでしょうか??

ただ、この方法だと最大で確保できるメモリが524,280バイトらしいのです。
これを超えるためには、VirtualAllocを利用するしかないのでしょうか??

あ〜、ヒープサイズを固定した場合ですか・・・
大きいサイズを請求するだけで自動的にVirtualAllocを利用するので問題ないらしいです。

まぁ、そういうわけで、GlobalAllocでハンドルを使い尽くさないようにHeapAllocを利用しましょうね☆
閉じる
テーマ:日記 URL:https://tsukiyori.sakura.ne.jp/index_m.cgi?ID=254
 
no prev page 1/1ページ(1件) no next page