できるだけ多くの記憶を削る必要があります。STL で標準の C++ を使用しています。このプログラムは (まだ) たいしたことはしておらず、[によるとtop
] 960Kb も必要です! 実行可能ファイルのサイズはわずか 64KB です。
コードの長さは 3000 行です。明らかに投稿するつもりはありません。問題は私のコードではなく、システム ライブラリにあると思います。
単一の main() 関数 (すべてのコードが含まれていますが、使用していません)は 732Kb の RAM を使用します!
簡単なコード:
int main() {
sleep(1000); //do nothing
return 0;
}
//Uses 732kb of RAM
私のコードにはグローバル変数がありません(私から隠されているライブラリの変数を除く)。
標準ライブラリ libstdc++ (STL)、GNU libc を使用しています。また、単一の BSD ソケットと libev、および非標準の STL ロープ クラス。
実行できるメモリ プロファイラーはありますか?
プラットフォーム: Linux 2.6.18-32、32 ビット プロセッサ、合計 16MB のシステム RAM、利用可能なスワップなし
コンパイラ: GCC 4
標準ライブラリ: GCC の libstdc++
コンパイラ オプション: -Os (デバッグ シンボルなし)
テンプレートを多用しているわけではありません。コンテナとイテレータだけです。しかし、私は SGI STL ロープ クラスを多用しています。
テスト環境は、128MB RAM、Pentium III 667 Mhz、CentOS 5.5、エミュレーションなしの Linux を実行する基本サーバーです。
更新: ライブラリ自体 (コード サイズ) が問題を引き起こしているかどうか疑問に思っています。共有ライブラリを RAM にロードする必要はありませんか?