free() 阻塞其他线程,系统速度变慢
free() blocking other threads, system slowdown
我正在开发一个多线程插件。当我在相当大的内存块(> 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(),因此所有内存释放调用都再次快速。
相关文章:
- C++,系统无法执行指定的程序
- 在UNIX系统中使用DIR查找文件的字节大小
- 为什么在读取文件大小时文件IO速度会发生变化
- 错误处理.将系统错误代码映射到泛型
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 在C++游戏中与库存系统作斗争
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 在gtest.中使用fff.h模拟系统API
- 如何制作无限制照明系统
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 并发内存访问减慢系统速度
- 减慢伊利希特粒子系统的速度
- 提升文件系统的速度慢得令人难以置信
- free() 阻塞其他线程,系统速度变慢
- 为速度关键系统设计跟踪/日志
- 执行系统命令的速度非常慢