Memory 小内存模型和大内存模型的区别是什么?

Memory 小内存模型和大内存模型的区别是什么?,memory,model,compiler-construction,Memory,Model,Compiler Construction,在Turbo C编译器中,当我选择“大内存模型”而不是“小内存模型”时,会有什么不同 这将如何改变我的程序的行为 问候,, 埃斯比夫 它指的是非常古老的16位内存模型概念。32位和64位计算机对这些内存型号一无所知 回到你的问题:small-声明指针只允许你处理64k的数据或代码。指针长度为16位。整个程序位于单个64k段中。要显式寻址内存的另一部分,需要尽可能显式地声明指针。large-声明指向代码或数据的指针有32位,因此默认情况下是远的 希望你们不要在这些问题上纠缠太久,因为这是一个过时的

在Turbo C编译器中,当我选择“大内存模型”而不是“小内存模型”时,会有什么不同

这将如何改变我的程序的行为

问候,,
埃斯比夫

它指的是非常古老的16位内存模型概念。32位和64位计算机对这些内存型号一无所知

回到你的问题:small-声明指针只允许你处理64k的数据或代码。指针长度为16位。整个程序位于单个64k段中。要显式寻址内存的另一部分,需要尽可能显式地声明指针。large-声明指向代码或数据的指针有32位,因此默认情况下是远的


希望你们不要在这些问题上纠缠太久,因为这是一个过时的概念

8086处理器使用16位段寄存器和16位偏移量的组合进行20位物理寻址。您可以将两者都打包到32位
指针中,也可以将默认段寄存器与较低的16位存储在
指针中


small
large
模型之间的区别很简单,指针在未明确指定的情况下默认是
NEAR
还是
FAR

这是过时的术语。。。你在写DOS程序吗?32位和64位x86机器确实知道16位内存型号,但现在运行的操作系统不太可能让你在这些机器上访问它。@kusma不,他们不知道。要像windows一样运行纯16位应用程序NT,需要启动所谓的WoW(windows上的windows)。16位和32位内存模式之间的最大区别是所谓的“32位保护模式”或平面模式。机器可以,否则您将无法启动,因为CPU在BIOS屏幕后以16位实模式启动。WoW是一个纯Windows结构(请参阅),它发生在CPU切换到64位模式之后。平面内存模式和真实模式之间的区别也不完全是你所想的。在进入保护模式时,完全可以将x86 CPU保持在16位模式。实际上,在286(请参阅)中添加了受保护模式,这是一个16位CPU。@kusma:CPU是以16位启动的-是的,但请看启动受保护的复杂方式。您谈到286的保护模式-但它缺少平面模型,到目前为止,286保护模式中的指针仍然有意义。