Memory

ReferenceTOPKeywords

コマンド名

memory - Tclメモリデバッグ能力を管理します。

構文

memory option ?arg arg ...?

解説

memory コマンドはTcl の開発者にTclのメモリデバッグ能力の制御権を与えます。メモリコマンドは下記のいくつかのサブオプションを持っています。メモリデバッグが可能な ( TCL_MEM_DEBUGがコンパイル時に定義されます ) 状態でTclがコンパイルされた時、Tcl_InitMemoryが呼ばれた後にのみ、本コマンドは利用可能になります。

memory active file
memory break_on_malloc count
memory info
memory init [on|off]
memory onexit file
memory tag string
memory trace [on|off]
memory trace_on_at_malloc count
memory validate [on|off]
memory active file 
現在割り当てられたメモリ全てのリストを指定されたfileに書き込みます。

memory break_on_malloc count
count サイズのメモリ割り当てが行われた後に、ckallocはこの結果のメッセージを出力した後に、Cデバッガに入り、Tclは自身に対してSIGINT信号を発布します。もしCデバッガの下でTclを実行している場合、それはデバッガコマンドモードです。

memory info
次の情報を含むレポートを返します。Tclが始まってからの総割り当て数とフリーメモリ、現在割り当てられたパケット(対応するckfreeコールを呼び出していない現在のckallocコールの数)、現在の割り当てられたバイト数、そして割り当てられたパケットとバイトの最大の数です。

memory init [on|off]
偽のバイトで割り当てられた全てのメモリの事前初期化をオン/オフします。初期化されない値の使用を検出するのに有効です。

memory onexit file 
Tclのメモリサブシステムの終了を行う間、割り当てられた全てのメモリのリストが指定されたfile に書き込まれます。メモリがプロセス中止の間に完全に片付けられたかどうかをチェックするのに有効です。

memory tag string
ckallocによって割り当てられたメモリの各パケットは文字列値のタグと関連付けるすることができます。memory activememory onexitによって生成された割り当てられたメモリに、関するリストに各パケットのためのタグが、パケットに関する他の情報と共に出力されます。 memory tag コマンドはstring を後続のckallocへのコールのタグ値として設定します。

memory trace [on|off]
メモリトレースをオンオフします。メモリトレースが行われているとckallocへの各呼び出しがトレース情報1行分をstderrに書き出します。この情報は次のものからなります。文字ckalloc、返されたアドレス、割り当てられたメモリの量 、 Cファイル名、そして割り当てを行うコードの行番号です。例えば
ckalloc 40e478 98 tclProc.c 1406

ckfreeへの呼び出しも同じ方法でトレースされます。

memory trace_on_at_malloc count
count 回のckallocを行った後でメモリトレースを可能にします。例えば、memory trace_on_at_malloc 100を入力する場合、 ckallocへの第100番目の呼び出し後に全ての割り当てとフリーメモリに関するトレース情報は表示し始めます。 問題が発生する前に多くのメモリ消費があるかもしれないので、このオプションの慎重な使用により、その問題が開始する前に発生するいくつかの割り当てを確認することができ、トレース及び生成されたトレース情報の量 によって引き起こされる性能妨害を避けられます。Tclがスタートした後で発生した現在のメモリ割り当て数は警告ゾーンの失敗として出力されます。

memory validate [on|off]
メモリ正当性検査をオン/オフします。メモリ正当性検査がオンになっていれば、全てのckallocckfree呼び出しに関して、警告ゾーンは現在ckallocによって割り当てられたメモリの断片ごとにチェックします。これは大きくパフォーマンスに影響しますので、メモリリーク(上書き)問題が強く疑われるときだけ使いましょう。メモリ正当性検査を可能にすることの利点は、ガードゾーンが上書きが発生した後の最初の ckallocckfree呼び出しで上書きを検出できるかもしれない点です。このような場合、上書きが生じたずっと後の、上書きされた警告ゾーンを持つ特定のメモリが解放される時点でしか問題が発見できないケースもありえます。

参照

ckalloc, ckfree, Tcl_ValidateAllMemory, Tcl_DumpActiveMemory, TCL_MEM_DEBUG

キーワード

memory, debug


Copyright © 1992-1999 by Karl Lehenbauer and Mark Diekhans Copyright © 2000 by Scriptics Corporation. Copyright © 1995-1997 Roger E. Critchlow Jr.