C++の勉強をしなおしてて、placement newなるものがあることに気が付き、
リスト管理クラスでchar Buffer[(タスクの最大サイズ)×(タスクの個数)]という領域を作っておいて、
リストのノードのほうでNode.Buffer = new(List.Buffer) char[タスクの最大サイズ]みたいに宣言すれば、
メモリの管理がしやすいのではないかなー、とか思ったんですよ。(すみません、文にして説明しづらいです)
タスクを生成する時は、Task = new(Node.Buffer) Task()とやる、みたいな感じで。
しかし現在、リスト自体の作成に苦労中。
単方向リスト作るのにすら苦戦しているなんて…もうねorz
ふんぐわ
RE: ふんぐわ
placement newでなくてnew演算子のオーバーライドのほうがメンテが楽だと思います。
…と最初のコメントに書きました。
new演算子のオーバーライドはとりあえず
void *operator new(size_t size) ;
void operator delete(void *p); // operator newとセット
というメンバ関数を定義すれば使えます。
operator newはsize分のメモリの先頭アドレスを返します。
operator deleteはpのアドレスのメモリを解放します。
operator newで事前に確保したメモリの使用フラグを立ててアドレスを返し、
operator deleteで使用フラグを倒す(メモリの解放はしない)という実装にできます。
同時に自動的にオブジェクト管理リストに追加・削除するといったこともできます。
…と最初のコメントに書きました。
new演算子のオーバーライドはとりあえず
void *operator new(size_t size) ;
void operator delete(void *p); // operator newとセット
というメンバ関数を定義すれば使えます。
operator newはsize分のメモリの先頭アドレスを返します。
operator deleteはpのアドレスのメモリを解放します。
operator newで事前に確保したメモリの使用フラグを立ててアドレスを返し、
operator deleteで使用フラグを倒す(メモリの解放はしない)という実装にできます。
同時に自動的にオブジェクト管理リストに追加・削除するといったこともできます。