函数式编程会占用更多内存吗?

时间:2010-12-23 20:38:12

标签: memory functional-programming

警告!可能是一个非常愚蠢的问题

函数式编程比程序式编程占用更多内存吗? 我的意思是......如果你的对象(数据结构无关紧要)都是可以改变的。你最不会在给定的时间内在记忆中有更多的物体。

这不会占用更多的记忆吗?

4 个答案:

答案 0 :(得分:6)

这取决于你在做什么。使用函数式编程,您不必创建防御性副本,因此对于某些问题,最终可能会使用较少的内存。

许多函数式编程语言也对懒惰有很好的支持,这可以进一步减少内存使用,因为在实际使用它们之前不会创建对象。然而,这可以说是仅与函数式编程相关的东西,而不是直接原因。

答案 1 :(得分:6)

持久的价值观,功能语言鼓励但可以用命令式语言实现,使分享变得简单。

虽然普遍接受的想法是使用垃圾收集器,但是在任何给定时间都有一些浪费的空间(已经无法访问但尚未收集的块),在这种情况下,没有垃圾收集器,你最终会经常复制值是不可变的并且可以共享,只是因为在使用后决定谁负责释放内存太麻烦了。

这些想法在this experience report中有所扩展,并不是一项客观的研究,而只是轶事证据。

答案 2 :(得分:1)

除了避免程序员使用防御性副本之外,Haskell或Standard ML(缺乏物理指针相等)等纯函数式编程语言的非常智能的实现可以主动恢复内存中结构上相等的值的共享,例如:作为内存管理和垃圾收集的一部分。

因此,您可以使用编程语言运行时系统提供的 hash consing

将其与Java中的对象进行比较:对象标识是语言定义的组成部分。即使只是将一个不可变String换成另一个也会造成语义问题。

答案 3 :(得分:0)

确实至少有一种倾向,认为记忆是富裕的资源(事实上,在大多数情况下确实如此),但这适用于整个现代节目。

对于多核,并行垃圾收集器和千兆字节的可用RAM,一个用于集中于程序的不同方面而不是之前的时间,当每个字节可以节省计数。请记住比尔盖茨说“640K对每个节目都应该足够”吗?