非常にメモリが限られているデバイスで、Go を使用して記述された「Hello world」プログラムを実行したいと考えています。
Linux で実行すると、現在のメモリ フットプリントが非常に高いように見えます (hello world の場合、64MB の VM サイズと 40MB の VM データ)。
Go ランタイム環境を構成してメモリ使用量を減らすにはどうすればよいですか?
非常にメモリが限られているデバイスで、Go を使用して記述された「Hello world」プログラムを実行したいと考えています。
Linux で実行すると、現在のメモリ フットプリントが非常に高いように見えます (hello world の場合、64MB の VM サイズと 40MB の VM データ)。
Go ランタイム環境を構成してメモリ使用量を減らすにはどうすればよいですか?
名前に「仮想」が含まれるメモリ使用量インジケータは、前述のように仮想であるため、分析するのに役に立たないことに注意してください。
gc
Linux 上の Go のランタイム (ツールチェーンによってビルドされたバイナリのgccgo
場合、割り当てに独自のアプローチを使用する可能性があります。確かなことはわかりません) は、いわゆる「アリーナ アロケーター」を使用します。 OS はこれを認識しますが、実際にはメモリは割り当てられず (つまり、物理メモリ ページはありません)、プロセスが実際にメモリを要求した場合にのみ実際の割り当てが行われます。
このため、分析する唯一の実用的なメモリ パラメータは、常駐セット サイズです。これは、仮想統計とは対照的RSS
に、プロセスのアドレス空間にマップされた物理メモリの量 (プロセスが物理的に割り当てて所有するメモリ) です。良い説明についてはこれを見て、一般的にこれをざっと読んでください。