考虑 c 中的 LinkedList 示例,其中我在堆栈上显式预分配 N 个节点结构以用作池或节点堆栈,而不是使用慢速 malloc 和释放,(我不需要在运行时释放节点的功能,所以一个堆栈会做):
#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[] 堆栈成为一个节点对象数组,其中内存是在堆栈中预分配的吗?
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 对象即使当我的程序几乎有堆溢出时,它也能像闪电一样发光。最大容量为 N 的节点堆栈和像我一样的运行索引对我来说是完美的......