我一直想知道如何在我的下一个项目中管理内存.这是在C/C++中编写DSL.
它可以通过三种方式中的任何一种来完成.
引用计数C或C++.
垃圾收集C.
在C++中,将类和结构从堆栈复制到堆栈,并使用某种GC分别管理字符串.
社区可能已经对这些方法中的每一种都有很多经验.哪一个会更快?每种方法的优缺点是什么?
一个相关的问题.malloc/free会不会比在程序开始时分配一个大块并运行我自己的内存管理器慢?.NET似乎做到了.但我很困惑为什么我们不能指望操作系统比我们自己做的更好,更快地完成这项工作.
这完全取决于!这是一个非常开放的问题.它需要一篇文章来回答它!
嘿..这是前面有人准备的:
http://lambda-the-ultimate.org/node/2552
http://www.hpl.hp.com/personal/Hans_Boehm/gc/issues.html
这取决于您的对象有多大,有多少对象,分配和丢弃的速度,您希望投入多少时间进行优化和调整以进行优化.如果你知道你需要多少内存的限制,为了获得快速的性能,我认为你不能真正地从前面的操作系统中获取所需的所有内存,然后自己管理它.
它可以从操作系统缓慢分配内存的原因是它处理磁盘和内存中的大量进程和内存,因此要获取内存,必须确定是否有足够的内存.可能,它可能必须将另一个进程内存从ram分页到磁盘,这样它就足够了.还有很多事情要发生.因此,自己管理(或使用GC收集的堆)比为每个请求访问操作系统要快得多.此外,操作系统通常会处理更大的内存块,因此它可能会使您发出的请求数量大小化,这意味着您可能会浪费内存.
你有超快速的真正硬性要求吗?许多DSL应用程序不需要原始性能.我建议你选择最简单的代码.您可以花一辈子时间编写内存管理系统,并担心哪种方式最好.