C 中动态结构的内存分配

问题描述 投票:0回答:1

说我有一个结构

struct GRAPH {
 NODE* nodes[];
}

具有节点[]的动态大小。我也有

struct NODE {
 char filename[40];
 struct NODE* links[];
}

我会在运行时知道我需要多少个链接和节点,并且可以计算出总的所需空间。 我知道运行 malloc() 是运行时成本很高的,所以为节点 [] 执行 malloc(),然后为每个节点添加 malloc() 的指针是不好的。

我想我将不得不为 GRAPH 的总大小调用 malloc(),然后手动处理来自该空间的指针,使用 char*(1 字节)并保存偏移量。我是否需要在每个 links[] 的末尾分配和处理空终止符(即使用更大尺寸的 calloc())?有没有更好的方法来解决这个问题?

c struct malloc variable-length-array
1个回答
1
投票

您可以按照您的描述进行操作,但使用 malloc 本身并不是坏事。事实上,绝大多数时候这不是问题。根据您的平台以及您的代码将如何处理图形,malloc 不太可能成为您代码中的性能瓶颈。

例如,在 HPC 上下文中,假设分配一个大图需要几分之一秒,那么您可能很容易花费 1000 倍的时间来实际执行您的代码设计的目的。 可能是你应该优化的。

话虽如此,如果您确实选择制作自己的分配器,则可以像您说的那样使用空终止符,或者如果您知道每种结构需要多少个,则可以准确分配所需的内容。

© www.soinside.com 2019 - 2024. All rights reserved.