我在C中编写堆数据结构。有一件事我无法决定。我将它作为一个数组实现。它的工作方式是,函数“insert”获取指向某些数据的指针并将指向的数据的所有字节复制到数组中,这是一个好方法吗?或者我应该只存储指针本身,该函数是用?
调用的答案 0 :(得分:2)
好吧,你必须考虑指向的内存可能会被更改或变为无效,例如当它是堆栈上的变量时。所以在大多数情况下,只存储指针不是一个好主意。 如果必须有一个函数insert(),则无法复制内存 - 尽管这很慢。最好是使用memcpy(),因为这仍然是最快的功能。
堆的设计通常有点不同:您有一个函数malloc(int size),您可以调用检索指向所需大小的内存区域的指针。在那里,你可以存储你需要的任何东西。
答案 1 :(得分:0)
如果插入的对象分配了malloc / calloc yes,则应该存储指针。特别是对于结构体,复制对象可能会增加开销。