这篇文章没有提到 “apt update”,只提到了 “apt upgrade”。 看起来本应有一段关于此的内容,但实际上没有。
您还应该提及 “apt” 和 “apt-get” 之间的区别。“apt” 对于交互式会话更友好,包括彩色文本和动画状态栏。 这些功能看起来不错,但在命令被脚本化或您从简单的终端类型运行时,它们会妨碍操作。
“apt-get” 命令几乎与 apt 做同样的事情,但用户反馈更简单,使其更适合在脚本中使用以及用户可能正在使用功能最少的终端的情况下使用。
64K 文档限制不是 “扩展” 内存(这是 DOS PC 访问超过 640K RAM 的几种机制之一,“扩展” 是使用 286+ 处理器保护模式的一种)的功能,而是 x86 处理器 “实模式” 中运行的软件使用的各种内存模型的功能。
在实模式下,内存使用段和偏移量进行管理。 一个段是 64K 的内存区域。 段寄存器是一个 16 位的值,表示物理内存位置除以 16。 偏移量是从段开始的 16 位偏移量。 是的,64K 可能的段之间有很多重叠。 这也定义了 1MB 的传统地址空间。
任何内存指针都可能是 “近” 的,这意味着它是 CPU 段寄存器之一(代码段和数据段)的 16 位偏移量,或者可能是 “远” 的,这意味着它是一个 32 位的值,其中包含段地址和从该段开始的偏移量。
用于 DOS 和实模式的编译器定义了内存模型,这些模型指定了应用程序默认使用的指针类型(应用程序始终可以显式声明指针为近或远)。
“Tiny” 模型意味着所有指针都是近指针,而且代码段和数据段寄存器具有相同的值。 因此,整个应用程序必须在 64K RAM 内。
“Small” 模型的所有指针都是近指针,但具有不同的代码段和数据段。 因此,应用程序被限制为 64K 代码和 64K 数据。
“Compact” 模型具有近代码指针但远数据指针。 因此,应用程序可以拥有高达 64K 的代码,但可以使用所有可用的 RAM 用于数据。
“Medium” 模型具有远代码指针和近数据指针。 因此,应用程序可以使用所有可用的 RAM 用于代码,但最多可以使用 64K 的数据。
“Large” 模型具有远代码指针和远数据指针。 因此,应用程序可以使用所有可用的 RAM 用于代码和数据。 但是标准库(如 C 运行时库)会将任何单个内存对象限制为 64K。
“Huge” 模型类似于 large 模型,但标准库包含允许单个对象与可用 RAM 一样大的代码,但这会以更复杂的指针运算(以及因此降低的性能)为代价来访问对象。
Freemacs 可能是使用 large 模型编写的,并且正在为文档使用单个内存缓冲区对象,因此文档大小限制为 64K。 这是 DOS 应用程序最流行的内存模型,因此我对 Freemacs 使用它并不感到惊讶。
另请参阅 https://devblogs.microsoft.com/oldnewthing/20200728-00/?p=104012
撰写评论
这篇文章没有提到 “apt update”,只提到了 “apt upgrade”。 看起来本应有一段关于此的内容,但实际上没有。
您还应该提及 “apt” 和 “apt-get” 之间的区别。“apt” 对于交互式会话更友好,包括彩色文本和动画状态栏。 这些功能看起来不错,但在命令被脚本化或您从简单的终端类型运行时,它们会妨碍操作。
“apt-get” 命令几乎与 apt 做同样的事情,但用户反馈更简单,使其更适合在脚本中使用以及用户可能正在使用功能最少的终端的情况下使用。
64K 文档限制不是 “扩展” 内存(这是 DOS PC 访问超过 640K RAM 的几种机制之一,“扩展” 是使用 286+ 处理器保护模式的一种)的功能,而是 x86 处理器 “实模式” 中运行的软件使用的各种内存模型的功能。
在实模式下,内存使用段和偏移量进行管理。 一个段是 64K 的内存区域。 段寄存器是一个 16 位的值,表示物理内存位置除以 16。 偏移量是从段开始的 16 位偏移量。 是的,64K 可能的段之间有很多重叠。 这也定义了 1MB 的传统地址空间。
任何内存指针都可能是 “近” 的,这意味着它是 CPU 段寄存器之一(代码段和数据段)的 16 位偏移量,或者可能是 “远” 的,这意味着它是一个 32 位的值,其中包含段地址和从该段开始的偏移量。
用于 DOS 和实模式的编译器定义了内存模型,这些模型指定了应用程序默认使用的指针类型(应用程序始终可以显式声明指针为近或远)。
“Tiny” 模型意味着所有指针都是近指针,而且代码段和数据段寄存器具有相同的值。 因此,整个应用程序必须在 64K RAM 内。
“Small” 模型的所有指针都是近指针,但具有不同的代码段和数据段。 因此,应用程序被限制为 64K 代码和 64K 数据。
“Compact” 模型具有近代码指针但远数据指针。 因此,应用程序可以拥有高达 64K 的代码,但可以使用所有可用的 RAM 用于数据。
“Medium” 模型具有远代码指针和近数据指针。 因此,应用程序可以使用所有可用的 RAM 用于代码,但最多可以使用 64K 的数据。
“Large” 模型具有远代码指针和远数据指针。 因此,应用程序可以使用所有可用的 RAM 用于代码和数据。 但是标准库(如 C 运行时库)会将任何单个内存对象限制为 64K。
“Huge” 模型类似于 large 模型,但标准库包含允许单个对象与可用 RAM 一样大的代码,但这会以更复杂的指针运算(以及因此降低的性能)为代价来访问对象。
Freemacs 可能是使用 large 模型编写的,并且正在为文档使用单个内存缓冲区对象,因此文档大小限制为 64K。 这是 DOS 应用程序最流行的内存模型,因此我对 Freemacs 使用它并不感到惊讶。
另请参阅 https://devblogs.microsoft.com/oldnewthing/20200728-00/?p=104012