由于malloc/calloc是在stdlib中为C定义的旧实现。 有没有什么更好的实现可以替代malloc/calloc? 请不要回答关于malloc/calloc方法的任何包装方法。 在C中分配内存的新实现不应该调用malloc/calloc而不是它应该实现自己的方法。有没有比malloc/calloc更好的实现在C中分配内存?
回答
你试过calloc()
功能吗?我从来没有用过它,但有些人有过。
calloc只是malloc,其分配的内存为零 – 2012-01-17 10:56:32
@Paul R.是的,但考虑到原始问题缺乏有用的要求,这很容易被认为是“更好的实现”。 – Roddy 2012-01-17 11:24:47
除非你的应用程序是多线程的,否则你可能不应该打扰。 This article suggests (for one platform, at least) that malloc
performs quite competitively in a single threaded environment。
那么,你应该在你的应用程序中使用哪个分配器?对于单一线程代码,Solaris OS上的
malloc
显示为强有力的选择。
你将很难做得比malloc
或它的非常类似的功能。如果你想要更好的内存分配,你可以打包malloc
或者调用操作系统的内存分配函数(但是在可移植性上失去了),并将自己的分配逻辑放在内存块的顶部。
如果你真的需要一个更好的内存分配,尽量Hoard:
囤积内存分配器是一个用于Linux,Solaris和Mac OS X的一个快速,可扩展和内存高效的内存分配,和视窗。 Hoard是malloc的一种替代品,可以显着提高应用程序的性能,特别是对于在多处理器和多核CPU上运行的多线程程序。
注意it's not necessarily free。如果你想要一个免费的,请尝试one of these。
在谷歌的一个快速搜索显示我没有其他C方法来分配内存像malloc一样有效(照顾内存对齐等)。从我看到它非常努力和难以尝试创建你自己的malloc-replacement ...
你可以使用brk()
和sbrk()
但它们不是标准C的一部分,它们只能在Unixy系统上正常工作。 mmap()
也值得一看,但它看起来像具有相同的缺点。
- 1. 有没有更好的实现方法?
- 2. 有没有更好的实现方法?
- 3. 有没有更好的方法来实现这种内存管理?
- 4. 有没有更好的选择在Scala中实现Builder模式?
- 5. 有没有更好的方式在C++中实现Java类本地类?
- 6. R:在e1071包中是否有比libsvm更好的SVM实现?
- 7. 有没有比CGContext更好的选择?
- 8. 有没有比libnotify更好的东西?
- 9. 有没有比reCaptcha更好的东西?
- 10. 虚拟内存分配没有物理内存分配
- 11. 有没有比内置的更好的Eclipse重构工具?
- 12. C++中没有“新”关键字的内存分配
- 13. 没有足够的内存分配?
- 14. 的sprintf没有内存分配
- 15. VHDL分配片没有实现?
- 16. C#中有没有Int24的实现?
- 17. C:有条件的内存分配
- 18. 有没有比permcalc更好的工具来分析权限?
- 19. Solr模糊匹配比精确匹配有更好的分数
- 20. 有没有比SQL存储过程更好的方法?
- 21. 没有在Eclipse中实现的更改
- 22. 有没有Java7的Hashmap实现比Java8的实现更受欢迎的场景
- 23. 有没有比用system()更好的在C++中提取命令的方法?
- 24. 错误在C:合并排序的实现 - 内存分配
- 25. 有没有比在SQL中使用FOR XML更好的选择
- 26. 在OSX中有没有比Navicat更好的东西?
- 27. 在JavaScript中有没有比setTimeout更好的东西?
- 28. 是否为没有实例变量的对象分配内存?
- 29. 有没有更好的方法来实现搜索地图?
- 30. 有没有更好的方法来与react.js实现对话?
没有“更好”的质量,只有基准。 – 2012-01-17 10:24:59
你卡在C中吗?或者你也可以使用C++吗?你会有新的关键。但要小心,如果你将malloc/free与new/delete混合使用。这种方法应该做什么样的工作? (例如,是否可以设置最大尺寸数组,是已知的类型...) – Beachwalker 2012-01-17 10:27:29
* malloc是旧的实现*旧的,因此破碎,对吧? – 2012-01-17 10:29:30