1

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

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);
4

1 回答 1

1

当堆栈只有几千字节并且“堆栈溢出”是一个常见错误而不是网站时,您可能一直在阅读旧教科书。

现代 PC 上的堆栈默认为几 MB;在 Linux 机器上,尝试ulimit -s. 上次我查看上网本时,我可以毫无困难地将莎士比亚的所有悲剧都写入堆栈。是的,有比这更大的数据集,但是您描述您的结构相对较小,因此您可能可以在堆栈上容纳数万(如果不是数百万)的结构,而不会出现任何问题。

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

于 2013-07-09T23:48:16.383 回答