2

[Python 1.5.2+](http://www.roundsolutions.com/techdocs/python/Easy_Script_Python_r13.pdf)を実行するTelitモジュールがあります。使用できる変数、モジュール、メソッド名の数(<500)、各変数のサイズ(16k)、RAMの容量(〜1MB)には一定の制限があります。詳細については、113ページと114ページを参照してください。生成されるシンボルの数、各変数のRAMのサイズ、メモリ使用量(スタックとヒープの使用量)を取得する方法を知りたいです。

リンクプロセスの後にgccで生成されるマップファイルに似たものが必要です。これにより、各定数/変数、シンボル、そのアドレス、および割り当てられたサイズが表示されます。

4

2 に答える 2

1

Pythonはインタプリタされ、動的に型付けされた言語であるため、そのような出力を生成することは、可能であるとしても非常に困難です。この情報を取得する唯一の合理的な方法は、ターゲットインタープリターでコードをプロファイリングすることだと思います。

真のメモリマップを探しているのであれば、PythonはCやC ++と同じ種類のコンパイルプロセスを実行しないため、そのようなツールが存在するかどうかは疑問です。プログラムが解析および解釈されるときにすべてが実行時に初期化および割り当てられるため、特にこのような異なるアーキテクチャで実行している場合は、あるインタプリタが別のインタプリタと同じように動作することは言うまでもありません。その結果、オブジェクトが同じ場所に作成されること、または全体的なメモリ構造が同じであることは言うまでもありません。

sys.getsizeof(object, [default])メモリフットプリントを決定しようとしているだけの場合は、Telitのライブラリでサポートされていれば、を使用して手動でチェックすることができます。彼らがCPythonの直接の実装を使用しているとは思いません。それでも、これは常に機能するとは限りません。パラメータTypeErrorを指定しないとオブジェクトのサイズを決定できない場合は、 raiseを使用しdefaultます。

モジュールのバイトコード逆アセンブルの出力を調べることで興味深い結果が得られる場合もありますが、これはインタープリターで機能し、インタープリターが実際にVMとして実装されているdisことを前提としています。dis

シンボルのリストが必要な場合は、このレシピをご覧ください。リフレクションを使用して、シンボルのリストをダンプします。

ここでは、適切な手動テストが重要です。最善の策は、モジュールのCMUX(COMポートMUXing)をセットアップし、コンソール出力を監視することです。メモリが不足し始めたかどうかはすぐにわかります。

于 2012-09-27T18:38:54.823 に答える
0

この投稿は、TelitGM862-GPSモジュールでの私の苦痛を一度思い出させてくれます。私のコードは、変数や文字列などの数が限界に達した時点にありました。もちろん、私はその時までにこの事実を知りませんでした。無実の行を1つ追加しましたが、プログラムが機能しなくなりました。この事実を見つけるためにデータシートを見るまで、私は2日間本当に夢中になりました。

Pythonインタープリターは本格的なバージョンではないため、探しているものは良い答えを持っていない可能性があります。私がしたことは、できるだけ多くの同じローカル変数名を使用することでした。また、関数のドキュメント文字列を削除し(それらもカウントされます)、#commentsに置き換えました。

最後に、このモジュールは小さなアプリケーションに適していると言いたいです。Pythonインタープリターはスレッドや割り込みをサポートしていないため、プログラムはスーパーループである必要があります。アプリケーションが大きくなると、各反復にかかる時間が長くなります。最終的には、より高速なプラットフォームに切り替えたいと思うかもしれません。

于 2013-03-01T15:08:19.990 に答える