假设我有一个结构体
struct GRAPH {
NODE* nodes[];
}
节点[]的动态大小。我还有
struct NODE {
char filename[40];
struct NODE* links[];
}
我知道在运行时需要多少链接和节点,并且可以计算所需的总空间,我知道运行malloc()在运行时开销很大,所以对nodes[]执行malloc(),然后为每个节点添加来自malloc()的指针是不好的。
我想我将不得不调用malloc()来获得GRAPH的总大小,然后手动处理来自这个空间的指针,使用char*(1字节)并节省偏移量。我是否需要在每个links[]的末尾分配并处理空终止符(即使用更大大小的calloc())?有没有更好的方法来实现这一点?
1条答案
按热度按时间cgfeq70w1#
你可以做你所描述的事情,但是使用malloc并不是天生就不好。事实上,在大多数情况下,它不是一个问题。根据你的平台和你的代码将如何处理图形,malloc不太可能成为你代码中的性能瓶颈。
例如,在HPC环境中,假设分配一个大型图形需要几分之一秒的时间,那么您可能很容易花费1000倍的时间来实际执行代码的设计目的。* 这 * 可能是您应该优化的。
也就是说,如果你选择了自己的分配器,你可以像你说的那样使用空终止符,或者如果你知道你需要的每个结构的数量,你可以精确地分配你需要的。