将C结构存储在堆栈中是一种好习惯吗?

时间:2013-07-09 21:23:05

标签: c memory-management struct stack heap

表示计算中某些变量的微小结构肯定应该存储在堆栈中,但是像这样的更常见的结构呢:

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 个答案:

答案 0 :(得分:1)

当堆栈为几千字节并且“堆栈溢出”是常见错误而不是网站时,您可能已经从后面阅读旧教科书。

现代PC上的堆栈默认为几MB;在Linux机器上,尝试ulimit -s。最后我检查了我的上网本,我可以毫不费力地将所有莎士比亚的悲剧写入筹码。是的,有比这更容易的数据集,但是你描述的结构相对较小,所以你可以在堆栈上安装成千上万(如果不是数百万)的结构而没有任何问题。

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

相关问题