我正在研究多线程插件。当我在相当大的内存块(> 10 MB)上执行free()时,使用我的插件的应用程序会暂时减慢太多。 (它是一个音频应用程序,音频线程的时间太少)。 我不确定free()是否使用了大量CPU,或者它是否阻塞了其他线程太长时间。 似乎对madvice()的调用正在做很多工作。我过去常常()占用的时间不多(当我以32位模式运行时不会这样做。)
一些信息: OSX 10.8 64位插件&程序 C ++
非常欢迎任何关于如何继续的建议。
答案 0 :(得分:2)
一个明显的建议当然是停止执行free()
(顺便说一下,这应该是C ++中某种形式的delete
。
只要您的插件仍然加载并处于活动状态(或者可能正在“运行”),就不要释放内存,在插件不再需要时可以释放资源。
如果您需要在释放旧缓冲区后重新分配新缓冲区,请找出重新使用已分配内存的方法。
答案 1 :(得分:0)
如果您重复使用内存,可能使用展示位置new
,那么您可以完全取消对free/delete
的调用。
答案 2 :(得分:0)
如果缓冲区大小相同或几乎相同,那么您可以从延迟free中获益,而使用realloc()。这可能比较棘手。
答案 3 :(得分:0)
对于大型分配,我现在使用vm_allocate(),它似乎不会调用冗长的madvice()。
由于我使用vm_allocate()及其对应的vm_deallocate(),所有内存释放调用再次快速。