「Mem」の版間の差分

提供:GizmoLabs - だいたい CAD LISP なサイト
編集の要約なし
編集の要約なし
15行目: 15行目:


; サンプル
; サンプル
* AutoCADの場合
<pre class="brush:autolisp;">
  コマンド: (mem)  
; AutoCADの場合
  (mem)  
  ; GC calls: 23; GC run time: 298 ms  
  ; GC calls: 23; GC run time: 298 ms  
  Dynamic memory segments statistic:  
  Dynamic memory segments statistic:  
29行目: 30行目:
  Segment size: 65536, total used: 68, free: 0  
  Segment size: 65536, total used: 68, free: 0  
  nil
  nil
</pre>
   
   
  * この現在の状態のレポートの先頭行には、次の情報が表示される。
  * この現在の状態のレポートの先頭行には、次の情報が表示される。
61行目: 63行目:
   AutoLISP Dynamic Memory(DM)サブシステムが要求したもののみをリストしている。
   AutoLISP Dynamic Memory(DM)サブシステムが要求したもののみをリストしている。
   AutoLISP のクラスは、メモリの割り当てに DM を使用しない。
   AutoLISP のクラスは、メモリの割り当てに DM を使用しない。




* IJCADの場合
* IJCADの場合
(mem)
<pre class="brush:autolisp;">
(mem)
  Nodes: 33934      <- LISPに割り当てられたノード数の合計。
  Nodes: 33934      <- LISPに割り当てられたノード数の合計。
  Free nodes: 1744  <- ガーベージコレクションで解放されたノードの数。
  Free nodes: 1744  <- ガーベージコレクションで解放されたノードの数。
70行目: 74行目:
  Allocate: 514      <- セグメントのサイズ。
  Allocate: 514      <- セグメントのサイズ。
  Collections: 24    <- ガーベージコレクションの数。
  Collections: 24    <- ガーベージコレクションの数。
</pre>
* IJCADの場合、1ノードは12バイト。セグメントのデフォルトサイズは514ノード。 [[alloc]] 関数を使用して、セグメントのサイズを変更でき、[[expand]] 関数を使用して、セグメントの数を変更できる。
* IJCADの場合、1ノードは12バイト。セグメントのデフォルトサイズは514ノード。 [[alloc]] 関数を使用して、セグメントのサイズを変更でき、[[expand]] 関数を使用して、セグメントの数を変更できる。



2013年2月1日 (金) 15:48時点における版

構文
(mem)


機能
AutoLISP のメモリの現在の状態を表示する。
AutoCADとIJCADで表示内容が異なる。
引数
  • なし
戻り値
nil


サンプル
; AutoCADの場合
 (mem) 
 ; GC calls: 23; GC run time: 298 ms 
 Dynamic memory segments statistic: 
 PgSz Used Free FMCL Segs Type 
  512 79 48 48 1 lisp stacks 
  256 3706 423 142 16 bytecode area 
 4096 320 10 10 22 CONS memory 
   32 769 1213 1089 1 ::new 
 4096 168 12 10 12 DM Str 
 4096 222 4 4 15 DMxx memory 
  128 4 507 507 1 bstack body 
 Segment size: 65536, total used: 68, free: 0 
 nil
* この現在の状態のレポートの先頭行には、次の情報が表示される。
GC calls    : AutoLISP が起動されてからのガベージ コレクション呼び出しの数
GC run time : ガベージ コレクションに要した時間の合計(ミリ秒)

LISP オブジェクトは、動的(ヒープ)メモリに割り当てられる。
動的(ヒープ)メモリはセグメントに編成され、ページに分割されている。
メモリの詳細は、「Dynamic memory segments statistic:」というタイトルの下に表示される。
PgSz : 動的メモリのページ サイズ(キロバイト)
Used : 使用されているページの数
Free : 未使用の(空の)ページの数
FMCL : 未使用ページの最大連続領域
Segs : 割り当てられているセグメントの数
Type : このセグメントに割り当てられたオブジェクトの種類。 
       これには、次のものがある。
       lisp        : stacks—LISP の内部スタック
       bytecode    : area—コンパイルされた関数モジュール コード
       CONS        : メモリ—CONS オブジェクト
       ::new       : タイプが不明なメモリ要求には、このセグメントが使用される
       DM Str      : 動的文字列の本体
       DMxx memory : その他の LISP ノード
       bstack body : 入出力処理に使用される内部構造体

レポートの最後の行には、最小セグメント サイズと、割り当てられているセグメントの数が表示される。
メモリ要求に対するシステム コールを節約するために、AutoLISP は 3 つの未使用セグメントのみの
リストを保持する。
すべてのヒープ メモリはグローバルである。つまり、すべての AutoCAD ドキュメントは、
同じヒープを共有している。これは、AutoCAD の将来のバージョンで変更される可能性もある。 

* mem 関数は、オペレーティング システムから要求されたすべてのメモリをリストするわけではなく、
  AutoLISP Dynamic Memory(DM)サブシステムが要求したもののみをリストしている。
  AutoLISP のクラスは、メモリの割り当てに DM を使用しない。


  • IJCADの場合
(mem)
 Nodes: 33934       <- LISPに割り当てられたノード数の合計。
 Free nodes: 1744   <- ガーベージコレクションで解放されたノードの数。
 Segments: 40       <- 割り当てられたセグメントの数。
 Allocate: 514      <- セグメントのサイズ。
 Collections: 24    <- ガーベージコレクションの数。
  • IJCADの場合、1ノードは12バイト。セグメントのデフォルトサイズは514ノード。 alloc 関数を使用して、セグメントのサイズを変更でき、expand 関数を使用して、セグメントの数を変更できる。



関連事項