如何重新定位堆分配数组的开头?

问题描述 投票:0回答:1

所以假设我正在使用 malloc 等实现一个队列。有没有一种简单的方法可以告诉 malloc 数组在我们出队后从 arr[1] 开始,以便它保持相同的大小?或者如果没有足够的空间来执行此操作(在堆分配数组的位置附近),则改为重新分配。考虑到我们正在重用数据,这似乎有一种更快的方法。

起初我以为我可以做 arr = &arr[1] 或类似的东西,但我不知道这如何与 realloc 等一起使用。

c heap-memory heap
1个回答
0
投票

当您使用

malloc()
realloc()
分配内存时,您有义务通过将相同的指针(值)传递给
free()
来释放内存,因此您必须保留该指针(值)。虽然
realloc()
可能会将分配移动到不同的地址,但您对此无法控制。
mmap()
允许您提示要将设备映射到内存的位置,但这只是一个提示。

您可以使用

memmove()
将数组中的数据复制到一个槽中,或者您可以分配一个新数组并复制数据。

分配后,您通常会保留该数组。然后维护一对相对于

arr
的索引,或者一个
head
tail
指针来找出
enqueue()
(尾部)和
dequeue
(头)的位置。将数组视为一个环绕的圆形相对容易,这样您就可以保留数组的全部容量。

© www.soinside.com 2019 - 2024. All rights reserved.