メモリ管理

クラスの実体(インスタンス)は、new関数で生成されます。

これら生成されたインスタンス(オブジェクト)の管理は、

C言語などのようにプログラムできちんと管理する必要はありません(malloc関数やfree関数を使って)。

(SystemVerilogのオブジェクトの管理は、Javaと同じで、自動的にガベージコレクションをおこってくれます)。

これは、必要なくなったインスタンス(オブジェクト)は自動的に使用したメモリ等を解放します。

たとえば、fork/join_noneなどの複数のタスクが同時に動かすときに、各タスクにオブジェクトを渡すときに威力を発揮します。

下記の例は、1つのオブジェクト( obj )を2つのタスク( task_a, task_b )で共用するとき、objは2つのタスクが共に終了したときに解放されます。

TestObj obj = new;

fork

task_a( obj );

task_b( obj );

join_none

上記のような記述において、自動的に使用したメモリを解放するような仕組みがないと、

ユーザが2つのタスク( task_a, task_b )が終了したことを確認してからオブジェクト( obj )を

解放しなければならないので、そのための処理(記述)が必要になってしまいます。