Malloc Geiger是malloc的一个钩子,它根据对malloc的调用量按比例播放Geiger计数器闪烁信号,以此来了解应用程序做了什么。这在很大程度上是一个玩笑,所以不要指望它在任何情况下都能正常工作。此时它只查看malloc,因此它不会对应用程序可能分配内存的任何其他方式做出反应。
//安装盖革点击malloc处理程序//saturation_rate,一个周期内最大限度完成点击所需的错误锁定量/每次检查是否播放点击之间的时间间隔(以微秒为单位)。//值越低,点击率越高。好的起始值往往是10000,这意味着//当分配数量饱和时,每秒最多点击100次/MALLOC_GEIGER_APIMG_STATUS INSTALL_MALLOC_GEIGER(min(number_of_mallocs_in_interval/saturation_rate,_t饱和度_RATE,SIZE_t INTERVAL);//卸载盖革点击Malloc处理程序MALLOC_GEIGER_APIMG_STATUS UNINSTALL_MALLOC_GEIGER(MALLOC_GEIGER_APIMG_STATUS UNINSTALL_MALLOC_GEIGER);//卸载盖革点击Malloc处理程序MALLOC_GEIGER_APIMG_STATUS卸载。
理想情况下,此调用应该在应用程序启动任何其他线程之前进行,以确保在另一个线程调用malloc或free时不会发生修补。
Malloc_geiger目前仅适用于Windows。它已经使用visual studio 2017在win64上进行了测试。
克隆存储库后,需要同步子模块。输入同步并运行的目录。
运行cmake配置,有一个用于执行此操作的脚本,该脚本是为忍者和发布版本提供的,这些版本安装在Build/Installed中。
由于该库构建为DLL并执行malloc函数的动态修补,因此可以将其安装在正在运行的应用程序中。如果应用程序有Python解释器,那么它是进行安装的极佳载体。
请注意,仅当运行时库在geiger_malloc和主机应用程序之间匹配时才有效。以下是用于将其安装到应用程序中的示例脚本
导入ctype mg=ctype。风卷。加载库(";<;path_to_install_dir>;/malloc_geiger.dll";)RES=mg.。如果res!=0:引发BaseException(';无法安装malloc geiger';),则安装_malloc_geiger(1,10000)。
在当前的设置中,malloc_geiger被构建为一个DLL,它要求使用它的应用程序使用动态运行时库。如果在具有静态运行时库的应用程序中使用它,则需要静态链接它。
它只覆盖malloc,任何不通过malloc的分配都将被错过。
由于声音代码中也存在锁定,因此malloc函数中存在潜在的死锁。没有投入时间来弄清楚这种情况是否会发生并适当地避免。
它覆盖DLL使用的malloc。如果宿主应用程序使用不同的运行时库,则需要配置构建设置以使其匹配才能工作。
替换的malloc有一个额外的锁,并执行一些额外的工作,因此会对性能产生负面影响。
从维基百科上找到的声音剪辑出来,这里是它的字幕https://upload.wikimedia.org/wikipedia/commons/5/58/Geiger_calm.oggSnaily[CC BY-SA3.0(http://creativecommons.org/licenses/by-sa/3.0/)]