gpt4 book ai didi

c - 如何检测分配内存块的位置?

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:11 24 4
gpt4 key购买 nike

内存块可以静态分配,可以在栈中,也可以在堆中。我想知道一种检测指针是否指向堆的方法。我使用 Windows 和 Linux,这不是每个操作系统的不同解决方案的问题。我使用 GCC 和 Mingw。

如果我能知道堆从哪里开始到哪里结束,我想问题就可以解决了。我认为我可以检测堆栈的底部和顶部,以便知道该 block 是否在堆栈中,但如果有多个线程,则有多个堆栈。即使我知道静态内存在哪里,我想我也会遇到共享库的静态内存块的问题。

如果指针没有指向 block 的开头,我想我会遇到问题:

type* x =  &(pointer[3]);

最佳答案

你不能。

您可能会尝试在程序开始时在堆上分配一 block 内存,并将该地址与您要释放的指针进行比较,但在很多情况下它并不准确。在对其内存管理进行一些研究之后,您可能会在一个平台上找到和使用的内容可能与下一个平台无关。

另一种方法是在您的程序中添加一个内存管理模块,它将包装mallocfree 等函数,并将跟踪所有分配的内存和仅当指针出现在他的列表中时才会调用 free。虽然这似乎需要做很多工作来避免内存泄漏,但我多次发现它非常方便。

编辑
正如评论中提到的,最好的决定方法很简单——将它释放到一个你知道它是否位于堆上的地方。我不能告诉你这对你来说有多简单,但通常应该不会太难,很多程序/程序员以前都这样做过,我怀疑有人真的试图检查内存分配的位置。

关于c - 如何检测分配内存块的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5924595/

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