cod*_*dey 1 c memory-management
面试官 - 如果您没有工具来检查如何检测内存泄漏问题?
回答 - 我将读取代码并查看我分配的所有内存是否已由代码本身释放.
面试官不满意.有没有其他方法可以这样做?
对于下面定义的所有实现,需要为malloc()和free()函数编写包装器.
为了简单起见,请跟踪malloc()和free()的计数.如果不相等则会出现内存泄漏.
一个更好的版本是跟踪地址malloc()'ed&free()'这样你可以识别哪些地址是malloc()'ed但不是free()'ed.但是这也无济于事,因为你无法将地址与源代码联系起来,特别是当你有一个大的源代码时它会成为一个挑战.
所以在这里,您可以添加一个功能.例如,我为FreeBSD Kernel编写了一个类似的工具,你可以修改malloc()调用来存储模块/文件信息(给每个模块/文件一个no,你可以在某些头文件中定义它),stack trace函数调用导致this malloc()并将其存储在数据结构中,只要调用malloc()或free(),就会将其存储在上述信息中.使用malloc()返回的地址与它匹配free().所以,当他们的内存泄漏时,你有关于哪些地址没有free()在哪个文件中的信息,被称为(通过stack trace)指向它的确切函数是什么.
这个工具的工作方式是,在崩溃时,我曾经得到一个核心转储.我在内核内存空间中定义了全局变量(这是我收集数据的数据结构),我可以使用它来访问gdb和检索信息.
编辑:
最近在调试linux内核中的内存泄漏时,我遇到了这个工具kmemleak,它实现了我在上面第3点中描述的类似算法.阅读下面的Basic Algorithm部分:https://www.kernel.org/doc/Documentation/kmemleak.txt
| 归档时间: |
|
| 查看次数: |
1008 次 |
| 最近记录: |