考慮在C中,其中i明確地預分配堆棧上N個節點結構作爲一個池或節點的堆疊使用鏈表爲例,而不是使用慢mallocs和釋放,(我不需要在運行釋放的節點所以堆棧會做的功能):預分配存儲器的棧上的對象,而然後在堆中JAVA
#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;
}
當我試圖immitate上述想法在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++];
}
}
Basiclly我想知道這一點,因爲我知道我想從我的程序能夠做到的,我知道,我不需要釋放和重複使用的內存塊的能力,我想成爲即使當我的程序幾乎有HEAP OVERFLOW時,也能夠快速地分配Node對象。節點與N的最大容量和運行指標和我一樣會是非常適合我的堆棧...
「使用新的動態分配內存的唯一途徑」,但我不試圖動態分配的,有沒有可能呢? – 2012-04-24 14:30:52
@OfekRon:正如我所說的,沒有機制強制JVM在堆棧上分配內存。 – NPE 2012-04-24 14:33:47
@你的編輯,最新的差異?據我所知,在程序中聲明的所有變量(糾正我,如果我是錯誤的)正在堆棧中分配內存。 (由編譯器) – 2012-04-24 14:42:12