小内存占用的语言选择

3

我有一个内存非常稀缺的小型VPS。出于兴趣,我想写一些服务器在上面运行,尽可能地减少内存使用。也许像git-daemon这样的东西,或者任何其他稍后出现的东西,有很多有趣的技术我很想自己尝试。

如果内存使用率最高是最重要的,你会推荐哪种编程语言?我很高兴(甚至更喜欢)学习新东西。


确实接近底层。当然,另一个问题是你是否用C语言编写一个非平凡的应用程序。 - user395760
你的意思是像Windows一样吗?他们成功地将内存消耗(嗯,使用?)作为最高优先级。 - Ira Baxter
3个回答

3
Forth是一种非常紧凑的编程语言,详情请参考Forth

谢谢,我一定会去看看。Forth看起来与我之前尝试过的所有东西都非常不同,应该是一个很好的练习(希望最终有所用处)。 - Gergely

2

好的老朋友C语言,除非你足够勇敢一路下到汇编。

为什么?
您可能不想要任何VMT。
您可能不想要任何动态类型。
您可能不想要任何内存占用VM。

它是微控制器的标准非汇编语言(内存很小),而C语言低内存占用是其中一个原因。


你也不想使用低端微处理器典型的弱指令来编写大量代码,因为这将占用很多空间,执行一些通用的任务,例如“服务器”。最好拥有密集的虚拟指令集,并一次性支付解释器的成本。 - Ira Baxter

1

我会建议一种具有密集虚拟机指令集的语言。这里还有另一个答案建议使用Forth,虽然它肯定是一种虚拟机,但我认为它在使用指针(非稠密完整字)选择执行例程方面未能通过测试。

谷歌的编译版本Java, Dalvik,据说是为了最小化内存占用而设计的,同时解释速度也相当快。作为开源软件,显然你可以获取并用于自己的目的。你很可能可以调整它以避免使用垃圾回收来帮助管理数据存储占用空间。

还有一个Cint,这是一个带有小型虚拟机的C语言解释器。它可能不如Dalvik快,后者使用模拟寄存器而不是堆栈。


@SK-logic:VM的“可扩展”指令集部分是经典的“子程序调用”操作码。运行得很好。 - Ira Baxter
@Ira Baxter:不完全是函数调用。更类似于高阶函数,因为Forth单词可以在任意堆栈深度上操作。而且,顺便说一句,不强制使用直接线程代码。我见过只有一个字节的单词标签的Forth实现。 - SK-logic
@Ira Baxter,考虑代码紧凑表示和运行时性能之间的平衡。间接线程代码可以。直接线程代码很快。但是从位流解码每个下一个操作码将非常缓慢。 - SK-logic
@SK-logic:你可以平衡解码和内存单元对齐访问,并且做得很好。显而易见的技巧是基于字节的Huffman编码。你可以少量地使用半字节导向。Dalvik的人坚持只使用16位,双字节对齐的单词,并且具有相当快的解码器。非常聪明的人生成Huffman编码,然后找到常见的指令序列作为附加操作码添加到纯Huffman方案中以填充到一些易于解码的边界;这为他们带来了更好的压缩和更快的执行。 - Ira Baxter
谢谢,Dalvik听起来是一个非常有趣的想法。不过,目前获取和编译VM似乎是一个非常复杂的过程。但这并不会阻止我(希望如此)。除了使用Google Code上的“dvk”之外,您有什么建议吗? - Gergely
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接