C语言中动态结构的内存分配

rsl1atfo  于 2023-03-17  发布在  其他
关注(0)|答案(1)|浏览(151)

假设我有一个结构体

struct GRAPH {
 NODE* nodes[];
}

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

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

我知道在运行时需要多少链接和节点,并且可以计算所需的总空间,我知道运行malloc()在运行时开销很大,所以对nodes[]执行malloc(),然后为每个节点添加来自malloc()的指针是不好的。
我想我将不得不调用malloc()来获得GRAPH的总大小,然后手动处理来自这个空间的指针,使用char*(1字节)并节省偏移量。我是否需要在每个links[]的末尾分配并处理空终止符(即使用更大大小的calloc())?有没有更好的方法来实现这一点?

cgfeq70w

cgfeq70w1#

你可以做你所描述的事情,但是使用malloc并不是天生就不好。事实上,在大多数情况下,它不是一个问题。根据你的平台和你的代码将如何处理图形,malloc不太可能成为你代码中的性能瓶颈。
例如,在HPC环境中,假设分配一个大型图形需要几分之一秒的时间,那么您可能很容易花费1000倍的时间来实际执行代码的设计目的。* 这 * 可能是您应该优化的。
也就是说,如果你选择了自己的分配器,你可以像你说的那样使用空终止符,或者如果你知道你需要的每个结构的数量,你可以精确地分配你需要的。

相关问题