free() 阻塞其他线程,系统速度变慢

free() blocking other threads, system slowdown

本文关键字:系统 速度 线程 其他 free      更新时间:2023-10-16

我正在开发一个多线程插件。当我在相当大的内存块(> 10 MB)上执行free()时,带有我的插件的应用程序会暂时减慢太多。(它是一个音频应用程序,音频线程获得的时间太少)。我不确定 free() 是否使用了大量 CPU,或者它阻塞其他线程的时间太长。似乎对madvice()的调用正在做很多工作。我习惯了free()占用的时间不多(当我以32位模式运行时不会)。

一些信息:OSX 10.864位插件和程序C++

非常欢迎任何关于如何继续的建议。

一个明显的建议当然是停止执行free()(顺便说一下,这应该是某种形式的delete C++)。

只要您的插件仍在加载并处于活动状态(或者可能是"正在运行"),就不要释放内存,当插件不再需要时释放资源。

如果在释放旧缓冲区后需要重新分配新缓冲区,请找出一种方法来重用已分配的内存。

如果您重用内存,也许使用放置new,那么您可以完全摆脱对free/delete的调用。

如果缓冲区的大小相同或几乎相同,则可以从延迟空闲并改用realloc()中受益。 这可能更棘手。

对于大分配,我现在使用 vm_allocate(),它似乎没有调用冗长的 madvice()。

由于我使用 vm_allocate() 及其对应的 vm_deallocate(),因此所有内存释放调用都再次快速。