gpt4 book ai didi

c++ - 当试图释放堆管理器分配的内存时会发生什么,堆管理器分配的内存比请求的多?

转载 作者:可可西里 更新时间:2023-11-01 17:30:10 26 4
gpt4 key购买 nike

这个问题是我在面试中被问到的。

假设 char *p=malloc(n) 分配的内存多于 n,即分配了 N 字节的内存,使用 free(p) 释放分配给 p 的内存。

堆管理器可以执行这样错误的分配吗?现在会发生什么,是释放 n 个字节还是释放 N 个字节?

有什么方法可以找到释放了多少内存?

编辑

有没有什么方法可以找到释放了多少内存?

聊胜于无

mallinfo() 可以阐明“Fred Larson”所指出的一些问题

最佳答案

是的,几乎每次执行 malloc() 时都会发生这种情况。 malloc block header 包含有关 block 大小的信息,当调用 free() 时,它将该数量返回到堆中。这不是故障,这是预期的操作。

例如,一个简单的实现可能只将 block 的大小存储在返回指针之前的空间中。然后,free() 看起来像这样:

void free(void *ptr)
{
size_t *size = (size_t *)ptr - 1;

return_to_heap(ptr, *size);
}

此处使用 return_to_heap() 是指执行将指定内存块返回堆以供将来使用的实际工作的函数。

关于c++ - 当试图释放堆管理器分配的内存时会发生什么,堆管理器分配的内存比请求的多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2336345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com