当malloc函数分配相同的内存位置?

时间:2015-10-15 12:49:25

标签: c linux malloc

我在我的bsm_create函数中的各个地方调用了malloc函数,但在某些地方我有相同的内存地址。 malloc / calloc函数可以释放一些位置,并再次在linux(fedora)环境中分配该位置。

3 个答案:

答案 0 :(得分:4)

当先前分配了malloc()(或其系列)的缓冲区已与free()一起发布(或在realloc()调用中间接释放)时,它将被重用 - 这意味着你可以预期它将在未来的分配中返回。这就是您首先想要free()的原因。

答案 1 :(得分:1)

  • 当malloc函数分配相同的内存位置时?
    • 当您调用malloc函数时,您要求在堆中提供一些空间。如果请求的空间存在,则malloc给出分配空间的起始地址。我们称之为 A A 是已分配空间的起始地址。
    • 当我们在这个分配的空间上调用free时,我们正在请求解除分配,所以现在这个返回的空间可以由运行时使用。因此,从已分配字节的位置 A 开始的内存将被释放并返回到运行时。
    • 所以,当有人再次要求一些空间时,很有可能 (以及概率!= 0 )从内存地址 A 开始的某些字节仍然是空闲的,因此运行时可以再次返回 A 。 / LI>

希望它有所帮助!

答案 2 :(得分:0)

您没有明确表明您是否释放了它们。正如其他人所说,可以重复使用释放的内存区域,但是如果仍然分配,你当然不会获得相同的地址。

但是如果你用更高的尺寸重新分配(realloc()和familly)它可以移动到其他地方,这样初始地址可以/可以在以后重复使用,即使没有释放任何东西。

示例:分配32 * sizeof(int)两次会得到地址:0xeee010 0xeee0a0

将第一个重新分配到64 * sizeof(int)会产生一个新地址:0xeee130

然后在第一个地址上分配另一个32 * sizeof(int):0xeee010