提问人:04Khey 提问时间:3/16/2023 更新时间:3/16/2023 访问量:75
C 语言中动态结构的内存分配
Memory allocation for dynamic structs in C
问:
假设我有一个结构
struct GRAPH {
NODE* nodes[];
}
具有节点的动态大小[]。我也有
struct NODE {
char filename[40];
struct NODE* links[];
}
我将知道运行时需要多少个链接和节点,并可以计算出所需的总空间。 我知道运行 malloc() 在运行时成本很高,所以对 nodes[] 执行 malloc(),然后为每个节点添加来自 malloc() 的指针会很糟糕。
我假设我将不得不调用 malloc() 来获取 GRAPH 的总大小,然后使用 char*(1 字节)手动处理来自该空间的指针并保存偏移量。我是否需要在每个链接[]的末尾分配和处理空终止符(即使用更大大小的calloc())?有没有更好的方法来解决这个问题?
答:
1赞
confusedandsad
3/16/2023
#1
你可以按照你描述的去做,但使用 malloc 本身并不是坏事。事实上,这在绝大多数时候都不是问题。根据您的平台以及您的代码将如何处理图形,malloc 不太可能成为代码中的性能瓶颈。
例如,在 HPC 环境中,假设分配一个大图形需要几分之一秒,那么您可以轻松地花费 1000 倍的时间实际执行代码设计要执行的任何操作。 这可能是您应该优化的。
话虽如此,如果你选择创建自己的分配器,你可以像你说的那样使用空终止符,或者如果你知道你需要多少个结构,你可以准确地分配你需要的东西。
评论
malloc
malloc
malloc