情報詳細Q:HALCONで利用されるメモリについて教えてください。A:HALCONで利用されるメモリは体系立てると3つのメモリタイプに分類される。1.global memoryHALCONオペレータコール「間」で持続する必要があるオブジェクトに割り当てられるメモリ。(すなわち、オペレータの戻り値として確保されるメモリ。)たとえば、tupleの要素として返される文字列は、グローバルメモリから割り当てられます。1024バイト未満のグローバルメモリオブジェクトは、グローバルメモリキャッシュに格納され、不要になったときには解放されません。このメモリは、システムのmalloc()関数を呼び出すこと無く、HALCONで再利用することができます。1024バイト以上のグローバルメモリオブジェクトは必要なくなった場合に解放されます。グローバルメモリキャッシュはOnまたはOffにすることはできますが、サイズを制限したり指定することはできません。割り当てるサイズは、そのシステムのアライメント係数の倍数に切り上げられる形で必要なサイズを割り当てます。parallel HALCONの場合、グローバルメモリキャッシュはsharedまたはthead localになります。(set_systemの'global_mem_cache'の設定に準じます。)> Global memory is freed when the user says that it not needed anymore by calling e.g. clear_obj or destroy_tuple. If the memory object is less than 1024 bytes, it is put into the global memory cache for reuse. If it is more, it is freed using the free() function.ここでいうfreeというのは、C言語で言えばdestroy_tuple、C++ならHTupleクラスのデストラクタに該当しますので、C++はいずれにしても勝手に消えるという認識でいます。実際に、スコープアウトしてデストラクタが呼ばれた段階で空きメモリが増えることも確認しています。C言語はこのメカニズムがないので、destroy_tupleの明示的な実行が必要です。勝手には消えません。変数を見失うとプログラム上から制御できなくなります。'cleanup'に設定することで開放できる可能性がありますが未検証です。C#はスコープアウトしててもメモリが不足するまで勝手に消えてくれないので、18.11ぐらいからであればDisposeによる明示的な解放をした方が良いかもしれません。HDevelopについて、中で使用しているのは、(最小構成にhalconc.dllが必要なことから)恐らくHALCON/CなのでCと同じと考えられますが、解放のタイミングがブラックボックス(HDevelopのソースコードのことは分からない)ので、詳細は不明です。2.Image memory画像に使用されるメモリです。このメモリは独自のイメージキャッシュがあります。最大サイズはset_systemのimage_cache_capacityにより制御できます。3.temporary memoryオペレーターの実行中にのみ使用するメモリ。このメモリはテンポラリメモリキャッシュにキャッシュされます。グローバルメモリとは異なり、テンポラリメモリは大きなスーパーブロック(SuperBlocks)に割り当てられ、必要に応じて細分されます。スーパーブロックはスタックのように管理されます。(つまり、新しいオブジェクトは常にスタックの最上部に配置され、オブジェクトは作成された逆の順序でのみ解放されます。 )常に1つの現在のスーパーブロックが割り当てられ、HALCONのメモリ要求を満たすために使用されます。現在のスーパーブロックに十分な空きメモリが残っていない場合、新しいスーパーブロックが割り当てられ、これが現在のものになります。前のスーパーブロックに残っている空きメモリは、新しい現在のスーパーブロックが解放されるまで未使用のままになります。スーパーブロックのサイズは、現在のイメージサイズに基づくヒューリスティックによって決定されます。このサイズは、set_systemのalloctmp_max_blocksizeパラメータによって制限されます。(HALCONが最大ブロックサイズより大きいメモリブロックを要求する場合、この設定に関係なくより大きいスーパーブロックが割り当てられます。)parallel HALCONの場合、テンポラリメモリキャッシュはthead localになります。すなわち、つまり、HALCONを使用するすべてのスレッドは独自のキャッシュを持ちます。 添付ファイルタイトルHALCONメモリマネージメントについてURL 名1792公開状況公開済み検証状況公開済み