跨语言的内存存储

时间:2015-08-07 21:38:58

标签: c++ ruby memory-management stack heap-memory

我是编程新手,最近发现了某些语言中对象和变量的存储是如何工作的(c ++,java,...)。但是当我(在随机网站上)读到存储如何在其他语言(如ruby)中工作时,显然堆栈的概念不存在,并且对象和变量保存在堆中。这是真的吗?

如果是这样,那么像堆栈这样的段或其他语言的(.data,.bss)不是物理存在吗?存储如何工作?我无法理解记忆段。

编辑:我不是在询问每种语言的内存片段,我只是想知道为什么一个片段存在于一种语言中而另一种语言存在于一种语言中。 (段不存在物理上......段?像RAM的不同部分一样)

1 个答案:

答案 0 :(得分:0)

Ruby语言规范没有提到堆栈和/或堆的任何内容。某个特定的Ruby实现是否碰巧使用堆,堆栈,两者,或者两者都不完全取决于实现者。

通常,Ruby实现将为每个进程使用一个堆,每个线程一个堆栈,每个光纤使用一个轻量级堆栈,但这是特定Ruby实现的私有内部实现细节,不向程序员公开,也不是以任何方式保证,即它可能随时更改,恕不另行通知。所有实现都不是这样。 MagLev为MagLev集群中的所有进程(以及所有计算机)提供单个分布式持久堆。 Cardinal没有堆栈,它使用在堆上分配的continuation。我相信SmallRuby为所有线程使用单个Spaghetti堆栈。

请注意,这并不罕见。例如,C#语言规范也没有说明堆或堆栈的任何内容。 Java语言规范或C ++标准也没有。