由于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. 有没有比libnotify更好的东西?
- 7. 有没有比CGContext更好的选择?
- 8. 有没有比reCaptcha更好的东西?
- 9. 有没有比内置的更好的Eclipse重构工具?
- 10. 的sprintf没有内存分配
- 11. C:有条件的内存分配
- 12. 有没有比permcalc更好的工具来分析权限?
- 13. 没有在Eclipse中实现的更改
- 14. 有没有Java7的Hashmap实现比Java8的实现更受欢迎的场景
- 15. 有没有比用system()更好的在C++中提取命令的方法?
- 16. 是否为没有实例变量的对象分配内存?
- 17. Tensorflow没有分配全部GPU内存
- 18. CArray没有取消分配内存
- 19. 在OSX中有没有比Navicat更好的东西?
- 20. 有没有更好的方法来实现redis“rpushnx”函数?
- 21. 有没有更好的方法来与react.js实现对话?
- 22. 有没有更好的方法来实现这个使用Perl?
- 23. 有没有更好的方法来实现递增和递减?
- 24. 在C中的宏中有条件释放分配的内存
- 25. 将更多的内存分配给现有的全局内存阵列
- 26. 没有内存分配(复制)的C#子阵列
- 27. C++正确的内存释放没有关于分配
- 28. 在C/C++中的内存分配
- 29. 使用malloc分配没有分配的内存,怎么样?
- 30. C++中的内存分配
没有“更好”的质量,只有基准。 – 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