質問させて頂きます
現在、非常に軽量化したソフトを開発しようと思っているのですが
タスクマネージャーで見ると、WinMainの中身を空にしても最低4Mは使用しています。
フリーソフトでは使用量が1M切ってるのも見かけたりしますが
これはどのようにして軽量化しているのでしょうか?
今の時代、数M程度は気にもならない程度になっておりますが
メモリの軽量化を目指しての開発をしたいと思っております。
どうぞよろしく御願いします。
なんとか.DLL をたくさんリンクしているとタスクマネージャ上の【見かけ】のサイズが大きくなるので
たぶんそういうことなんぢゃないかなー・・・と
コンソールアプリケーション main() { Sleep(); } だけでも、タスクマネージャ上の見かけで 600K 食うわけで。
本当にメモリを食っているかどうかは、タスクマネージャ上の見かけの数値にだまされないよう、
よく注意して測定しないといけないよ
対象OSが書かれていませんので仮にXPとします。また、Embedded OSでない
と仮定します。まず、OSが200〜250MByteほど使用しますので、OS自体を
安定して動作させるのには物理メモリが512程度は必要となります。
仮にアプリケーションが10MByte消費した場合。
1.これは空きメモリーの3%を占有しているに過ぎない。
2.半分にできたところで1.5%の改善にしかならない。
ということになります。
次に、メモリー消費を無理に抑えると、
3.当然処理が遅くなる。
ので、常識的に、これらの努力はユーザーの評価の対象となるものでは
ありません。むしろ迷惑になるわけです。
んで、メモリ使用量を抑える一般的な方法は
A.登録クラス及びWindowを作らない。一切の表示を行わない。
B.リソースを含めず、使わない。
C.メモリーアロケーションしない。
細かな注意としては
D.必要になるまで使わない(スタック/ヒープ/フリーストア)
E.不要になったらすぐに破棄する(同)
当然MFCは使わないでしょうから
F.コールバックを1つにまとめる
等が考えられます。
個人的にお勧めしませんけども。
http://homepage1.nifty.com/kazubon/progdoc/tclock/nodeflib.html
レス有難うございます。
>tetrapod様
成る程。私の環境でmain(){Sleep();}では1.2Mと表示されました
仰るとおり本当にメモリを食ってるかは分からないのですね
>仲澤@失業者様
申し訳ございません。OSはXP SP2です。
詳細に書いて頂き有難うございます。
> 3.当然処理が遅くなる。
>ので、常識的に、これらの努力はユーザーの評価の対象となるものでは
>ありません。むしろ迷惑になるわけです。
確かにその通りですね。某所でメモリの使用量を気にする意見を見かけ
メモリの軽量化も意識しましたが
やはりメモリを上手く利用し、処理速度の向上を行うのが良いですね。
眼が覚めました。
>aetos様
そのようなテクニックがあるのですね。
>・Cの標準関数や処理系が用意した関数が使えない。Windows APIしか使えない。
と、Cの標準関数が使えないのは痛いですが、知識の一つとして学んでみます。
レスをして下さった皆様本当に有難うございました。
ツイート | ![]() |