c の LinkedList の例を考えてみましょう。ここでは、低速の malloc と free を使用する代わりに、プールまたはノードのスタックとして使用するために、スタック上に N 個のノード構造体を明示的に事前に割り当てています (実行中にノードを解放する機能は必要ないので、スタックで十分です):
#define N 40000
typedef struct node_t {
void * ele;
struct node_t * next;
}node,*Pnode;
node Stack[N];//memory allocation for the linkedlist nodes
int sp=0;
Pnode createNode(void * x) {
Pnode temp=&Stack[sp++];
temp->ele=x;
temp->next=NULL;
return temp;
}
上記のアイデアを Java で模倣しようとしたとき、それが思いつきました... Node[] スタックを、メモリが STACK で事前に割り当てられたノード オブジェクトの配列にするクラスを完成できますか?
public class Node<E> {
private final static int n = 40000;
private static Node[] stack = ?
private static int sp = 0;
private E ele;
private Node next;
private Node () {}
public Node createNode(E e) {
stack[sp].ele=e;
stack[sp].next=null;
return stack[sp++];
}
}
基本的に、これを知りたいのは、自分のプログラムで何ができるようにしたいのかを知っているからです。また、メモリ ブロックを解放して再利用する機能は必要ないこともわかっています。Node オブジェクトをすばやく割り当てることができるようにしたいのです。私のプログラムがほとんどHEAP OVERFLOWを持っているときでさえ、稲妻として。最大容量 N のノードのスタックと、私が行ったような実行中のインデックスは、私にとって完璧です...