Memory management 80年代的计算机程序怎么会这么小?

Memory management 80年代的计算机程序怎么会这么小?,memory-management,programming-languages,hardware,Memory Management,Programming Languages,Hardware,当你看到为一些80年代的旧电脑编写的程序时,比如commodore64、atari和NES,它们的大小非常小,大部分都在几百KB的范围内 更不用说这些计算机运行的内存非常少,就像Commodore64有64KB的RAM,但却能运行GUI操作系统 这些程序怎么写得这么小 考虑到硬件的限制,他们中的许多人似乎令人难以置信。 在commodore 64上,其320x200@4bpp的分辨率将吞噬其64k内存的一半 而Atari 2600只有128字节的ram 在今天的应用程序中,80%或更多的磁盘大小

当你看到为一些80年代的旧电脑编写的程序时,比如commodore64、atari和NES,它们的大小非常小,大部分都在几百KB的范围内

更不用说这些计算机运行的内存非常少,就像Commodore64有64KB的RAM,但却能运行GUI操作系统

这些程序怎么写得这么小

考虑到硬件的限制,他们中的许多人似乎令人难以置信。 在commodore 64上,其320x200@4bpp的分辨率将吞噬其64k内存的一半

而Atari 2600只有128字节的ram

  • 在今天的应用程序中,80%或更多的磁盘大小是图形元素

  • 当空间相对于程序员的时间来说是昂贵的时候,程序员花更多的时间优化大小,并且经常使用原始汇编。如今,空间很便宜,所以公司节省空间是不值得的

  • 将记事本与Edlin进行比较。两者都是最简单合理的文本编辑器。Edlin可以轻松地将程序和数据放在不到64K的范围内。但并没有人能声称记事本是图形Edlin

  • C64没有gui操作系统。它有一个基本的菜单系统,熟练的程序员可以使用定制的硬件精灵来覆盖小的图形图标

  • 在低分辨率模式下,每像素有4位(16种颜色)。在高分辨率模式下,每像素1位(单色)。今天的系统假定每像素16位或更高,为1080p(约1900 x 1080像素)。甚至单色显示器也从8k膨胀到1MB以上。对于期望24位或更高颜色深度的现代显示器,单帧所需的最小存储空间为数兆字节。再加上现代图形卡用于缓冲和其他功能的工作空间,您的图形需要运行到千兆字节并不需要很长时间。这一代计算机上的高分辨率模式很少使用是有原因的

  • 加载程序时,卸载操作系统。您一次只运行一个程序。今天,我经常一次运行20个或更多的应用程序,更不用说做工作所需的几十个后台进程了

  • 在今天的应用程序中,80%或更多的磁盘大小是图形元素

  • 当空间相对于程序员的时间来说是昂贵的时候,程序员花更多的时间优化大小,并且经常使用原始汇编。如今,空间很便宜,所以公司节省空间是不值得的

  • 将记事本与Edlin进行比较。两者都是最简单合理的文本编辑器。Edlin可以轻松地将程序和数据放在不到64K的范围内。但并没有人能声称记事本是图形Edlin

  • C64没有gui操作系统。它有一个基本的菜单系统,熟练的程序员可以使用定制的硬件精灵来覆盖小的图形图标

  • 在低分辨率模式下,每像素有4位(16种颜色)。在高分辨率模式下,每像素1位(单色)。今天的系统假定每像素16位或更高,为1080p(约1900 x 1080像素)。甚至单色显示器也从8k膨胀到1MB以上。对于期望24位或更高颜色深度的现代显示器,单帧所需的最小存储空间为数兆字节。再加上现代图形卡用于缓冲和其他功能的工作空间,您的图形需要运行到千兆字节并不需要很长时间。这一代计算机上的高分辨率模式很少使用是有原因的

  • 加载程序时,卸载操作系统。您一次只运行一个程序。今天,我经常一次运行20个或更多的应用程序,更不用说做工作所需的几十个后台进程了


  • 除了C64(和C128)之外,我不能为其他系统说话

    正如@pojo-guy所说的,我们经常直接进行汇编,这减少了操作系统的开销,因为操作系统在ROM中,所以它不使用RAM。此外,您还可以通过使用内存寄存器来进出ROM,实际上将可用内存“翻倍”(尽管其中一些“可用”内存是只读的,关键是您没有在操作系统例程上浪费宝贵的RAM)。通过使用ROM例程和直接组装,消除了大量(内存)开销

    对于位图,您有两种选择:高分辨率或多色模式。在高分辨率(320 x 200)中,每个像素显示前景或背景颜色-因此您只需要320 x 200=64000位或8000字节

    标准多色模式以牺牲水平分辨率为代价提供四种颜色。引用C64程序员参考手册:

    多色模式下的每个点可以是4种颜色中的一种:屏幕颜色(背景色寄存器0)、背景色寄存器1中的颜色、背景色寄存器2中的颜色或字符颜色。唯一的牺牲是水平分辨率,因为每个多色模式点的宽度是高分辨率点的两倍。最小分辨率由多色模式的额外功能补偿

    开销的减少、操作系统的简化(可以完全替换掉)和功能的简化(例如,2位颜色可以让你拥有四种颜色),使事情变得更小。随着技术的进步,编码器也应用了覆盖:在其他部件播放时加载部件

    此外,更高级的体系结构(如C128)有单独的视频RAM(16K或64K,取决于您的C128型号),由于图形(或文本)不占用处理空间,因此提供了更多的空间来伸缩编码肌肉

    查看任何4k演示比赛,看看有了这样一个小玩意儿,机器到底能做些什么