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

标签 c struct memory-management heap-memory stack-memory

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

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

最佳答案

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

现代 PC 上的堆栈默认为几 MB;在 Linux 机器上,尝试 ulimit -s。上次我在上网本上查看时发现,我可以毫不费力地将莎士比亚的所有悲剧写到堆栈中。是的,有比这更大的数据集,但你描述你的结构相对较小,所以你可以毫无问题地在堆栈上容纳数万(如果不是数百万)你的结构。

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

关于c - 将 C 结构存储在堆栈上是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17558499/

相关文章:

c++ - 在结构 vector C++ 中搜索值的范围

c++ - 我应该忘记动态内存分配和指针并始终通过 v 吗?

c - 如何确保线程被阻塞?

c - 试图理解 C 中的函数指针

c - C 中的程序不计算 % 并在特定输入上中断/退出

c++ - 如何将文件存储在可执行文件中

c++ - 结构数组成员的默认值

c - 使用 C 中的结构的不可预测的输出

c - C中结构和指针的malloc

c - 指针对齐和别名