我想在C中实现一个队列。特别是我希望队列可以根据用户的喜好动态分配或固定大小。
我的问题是我不想每次弹出东西时都移动所有的值,所以我基本上跟踪了一个指针,该指针指示了数组中队列的开始和长度。当用户将队列设置为动态分配时,它增加了一些复杂性,使代码变得混乱。
我很好奇我是否能以某种方式释放动态分配内存的第一个元素,以及这是否会对我的代码产生奇怪的影响。
所以我想知道是否有人能告诉我:
- 可以只释放使用malloc分配的内存的一部分?(我考虑在ptr+1和ptr上使用reallocarray,然后在原始指针上调用free,但这看起来像是ub,因为可能有一些关于操作系统内部存储的内存分配大小的信息)
- 如果我继续以这种方式重新分配,我的数组是否会因为连续而“走出”进程内存?(我希望不会,因为我假设操作系统会进行一些智能Map,数组实际上并不是连续的,但最好能确定这一点)
2条答案
按热度按时间nukf8bse1#
memmove
可用于移位元件。这将保留分配的内存,直到程序终止。
8e2ybdfx2#
1.是的,使用malloc可以只释放一部分内存,你可以使用
realloc()
函数来调整分配的内存大小,然后在原始指针上调用free()
。1.不,你的数组不会“走”出进程内存。操作系统会进行智能内存Map,防止这种情况发生。