草庐IT

从外部程序计算使用 malloc() 分配的 block

我想写一个“简单的”内存泄漏检查器。为了做到这一点,我需要计算程序中malloc()ed内存块的数量,但问题是我不想修改它的来源。换句话说,我想实现以下接口(interface):memory_check我无权访问可执行文件的源代码。首先我应该尝试拦截系统调用。但我读到“Somallocdoesn'tinvokeanysyscall?”,它似乎不是一个主意,还因为它会极大地降低所有系统的速度(正如我所想的那样)。是否有任何其他选项可以拦截malloc()调用? 最佳答案 如果您愿意将界面更改为LD_PRELOAD=mymalloc.

c++ - 在 C++ 程序中使用电子围栏

我最近一直在试验ElectricFence,但我不知道如何将它与C++代码一起使用。这是一个例子://test.cpp#includeusingnamespacestd;intmain(){int*a=newint(10);deletea;}我用它编译的g++./test.cpp-otest-lefence-L/home/bor/efence_x86_64/lib-lpthread而且我在开始时没有看到ElectricFence横幅,也无法在可执行文件中找到EF符号(使用nm命令)。但是如果我这样修改一个程序://test.cpp#includeusingnamespacestd;in

c++ - 在 C++ 程序中使用电子围栏

我最近一直在试验ElectricFence,但我不知道如何将它与C++代码一起使用。这是一个例子://test.cpp#includeusingnamespacestd;intmain(){int*a=newint(10);deletea;}我用它编译的g++./test.cpp-otest-lefence-L/home/bor/efence_x86_64/lib-lpthread而且我在开始时没有看到ElectricFence横幅,也无法在可执行文件中找到EF符号(使用nm命令)。但是如果我这样修改一个程序://test.cpp#includeusingnamespacestd;in

c - malloc.c 中如何/在哪里使用 sbrk?

我在AdvancedUnixProgramming(以及其他几本书)中读到Linuxmalloc()使用Linux系统调用sbrk()来请求内存操作系统。我正在查看glibcmalloc.c代码,我可以在注释中看到很多提及sbrk()的地方,但没有在代码中直接提及。malloc()从操作系统请求内存时,如何/在哪里引用/使用sbrk()?(这可能是我对如何从C运行时库进行系统调用的普遍误解。如果是这样,我很想知道它们是如何进行的??) 最佳答案 Glibc的malloc.c通过调用存储在__morecore全局函数指针中的函数来请求

c - malloc.c 中如何/在哪里使用 sbrk?

我在AdvancedUnixProgramming(以及其他几本书)中读到Linuxmalloc()使用Linux系统调用sbrk()来请求内存操作系统。我正在查看glibcmalloc.c代码,我可以在注释中看到很多提及sbrk()的地方,但没有在代码中直接提及。malloc()从操作系统请求内存时,如何/在哪里引用/使用sbrk()?(这可能是我对如何从C运行时库进行系统调用的普遍误解。如果是这样,我很想知道它们是如何进行的??) 最佳答案 Glibc的malloc.c通过调用存储在__morecore全局函数指针中的函数来请求

c - 执行free后进程的内存使用行为

我有一个正在执行内存使用分析的应用程序。我正在用一些数据加载应用程序,并且应用程序是这样的,它从这个抽取的数据中缓存(以一些哈希表和其他数据结构的形式存储,可以说是一些记录)信息。对于存储在内存中的每条记录,应用程序使用malloc/calloc分配内存。一段时间后,大约80%的记录超时,应用程序释放它为这些记录分配的内存。为了检查应用程序的内存使用情况,我在后台运行了一个脚本来捕获top和“free-m”的输出,并绘制了一个图表来查看系统的内存使用情况,如下所示。该图显示了在“-/+buffers/cache”行下“free-m”打印的值中看到的趋势,其中包含已使用和空闲的列。我期望

c - 执行free后进程的内存使用行为

我有一个正在执行内存使用分析的应用程序。我正在用一些数据加载应用程序,并且应用程序是这样的,它从这个抽取的数据中缓存(以一些哈希表和其他数据结构的形式存储,可以说是一些记录)信息。对于存储在内存中的每条记录,应用程序使用malloc/calloc分配内存。一段时间后,大约80%的记录超时,应用程序释放它为这些记录分配的内存。为了检查应用程序的内存使用情况,我在后台运行了一个脚本来捕获top和“free-m”的输出,并绘制了一个图表来查看系统的内存使用情况,如下所示。该图显示了在“-/+buffers/cache”行下“free-m”打印的值中看到的趋势,其中包含已使用和空闲的列。我期望

c - Linux 上的 Malloc 没有过度使用

我如何在Linux上分配内存而不过度使用,以便malloc在没有可用内存且进程不会在访问时随机崩溃时实际返回NULL?我对malloc工作原理的理解:分配器检查空闲列表是否有空闲内存。如果是,则分配内存。如果否,则从内核分配新页面。这就是过度使用可能发生的地方。然后返回新的内存。因此,如果有一种方法可以从内核中获取由物理内存立即支持的内存,分配器可以使用它而不是过度使用页面,如果内核拒绝提供,则返回NULL更多内存。有没有办法做到这一点?更新:我知道这不能完全保护进程免受OOMkiller的攻击,因为如果它的分数不好,它仍然会在内存不足的情况下被杀死,但这不是我担心的。更新2:Nomi

c - Linux 上的 Malloc 没有过度使用

我如何在Linux上分配内存而不过度使用,以便malloc在没有可用内存且进程不会在访问时随机崩溃时实际返回NULL?我对malloc工作原理的理解:分配器检查空闲列表是否有空闲内存。如果是,则分配内存。如果否,则从内核分配新页面。这就是过度使用可能发生的地方。然后返回新的内存。因此,如果有一种方法可以从内核中获取由物理内存立即支持的内存,分配器可以使用它而不是过度使用页面,如果内核拒绝提供,则返回NULL更多内存。有没有办法做到这一点?更新:我知道这不能完全保护进程免受OOMkiller的攻击,因为如果它的分数不好,它仍然会在内存不足的情况下被杀死,但这不是我担心的。更新2:Nomi

linux - 你能推荐一个很好的 linux 调试 malloc 库吗?

你能推荐一个很好的linux调试malloc库吗?我知道那里有很多选择,我只需要知道人们实际使用哪些库来解决现实生活中的问题。谢谢!编辑:我知道Valgrind,但有时性能真的太低了。 最佳答案 Valgrind.:-)它不是malloc库,但是,它非常擅长查找内存管理和内存使用错误。 关于linux-你能推荐一个很好的linux调试malloc库吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/