在计算中表示一些变量的微小结构肯定应该存储在堆栈中,但更常见的结构又如何呢?
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);发布于 2013-07-10 07:48:16
当堆栈只有几千字节,“堆栈溢出”是一个常见的错误时,你可能正在阅读以前的教科书,而不是一个网站。
在现代PC上,默认情况下堆栈大小为几MB;在Linux机器上,可以尝试ulimit -s。最后我看了看我的上网本,我可以毫不费力地把莎士比亚所有的悲剧都写进书架。是的,有很容易比这个更大的数据集,但你说你的结构相对较小,所以你可能可以在堆栈上容纳数万个(如果不是数百万个)的结构,而没有任何问题。
正如注释中所提到的,将结构直接写入堆栈也具有通常的便利,即不需要分配或释放内存。
https://stackoverflow.com/questions/17558499
复制相似问题