所以假设我正在使用 malloc 等实现一个队列。有没有一种简单的方法可以告诉 malloc 数组在我们出队后从 arr[1] 开始,以便它保持相同的大小?或者如果没有足够的空间来执行此操作(在堆分配数组的位置附近),则改为重新分配。考虑到我们正在重用数据,这似乎有一种更快的方法。
起初我以为我可以做 arr = &arr[1] 或类似的东西,但我不知道这如何与 realloc 等一起使用。
当您使用
malloc()
或 realloc()
分配内存时,您有义务通过将相同的指针(值)传递给 free()
来释放内存,因此您必须保留该指针(值)。虽然 realloc()
可能会将分配移动到不同的地址,但您对此无法控制。 mmap()
允许您提示要将设备映射到内存的位置,但这只是一个提示。
您可以使用
memmove()
将数组中的数据复制到一个槽中,或者您可以分配一个新数组并复制数据。
分配后,您通常会保留该数组。然后维护一对相对于
arr
的索引,或者一个 head
和 tail
指针来找出 enqueue()
(尾部)和 dequeue
(头)的位置。将数组视为一个环绕的圆形相对容易,这样您就可以保留数组的全部容量。