2013-07-09 50 views
1

代表在计算一些变量微小结构绝对应该存储在堆栈上,而是比较常见的结构是什么像这样的:在堆栈上存储C结构是否是一种很好的做法?

typedef struct { 
    int number_of_nodes; 
    int number_of_edges; 
    char *adjacency_matrix; 
} graph_t; 

现在我保存在栈上graph_t结构:

graph_t graph1 = read_graph(PATH); 
graph_t graph2 = new_graph(graph1.number_of_nodes); 
func(&graph1, &graph2); 

是否有任何理由将此结构保存在堆内存中而不是堆栈中?

graph_t *graph1 = read_graph(PATH); 
graph_t *graph2 = new_graph(graph1->number_of_nodes); 
func(graph1, graph2); 
+1

堆栈也是内存...... – 2013-07-09 21:32:47

+1

另外,不,如果结构是变量的本地,并且不需要返回指向它们的指针,那么肯定不会为它们mallocate内存,只是声明它们具有自动存储时间。 – 2013-07-09 21:33:32

+2

@ H2CO3“mallocate”?爱它。 – feralin

回答

1

你可能已经从读回旧的课本时栈几KB和“堆栈溢出”是一个常见的错误,而不是一个网站。

现代PC上的堆栈默认为几MB;在Linux上,请尝试ulimit -s。最后,我检查了我的上网本,我可以毫无困难地将所有莎士比亚的悲剧写入堆栈。是的,有数据集比这个容易得多,但是您描述的结构相对较小,因此您可能会将数以万计的结构(如果不是数百万)放在堆栈上,而没有任何问题。

正如在评论中提到的那样,将结构直接写入堆栈也具有不需要分配或释放内存的通常便利。

相关问题