小内存模型和中型内存模型之间有什么区别?

时间:2012-08-15 14:49:31

标签: assembly compiler-construction x86

维基百科和其他资源描述了{x}平台上编译器可用的different memory models(实模式)。

我可以看到微小模型和小模型之间的区别(代码很小,堆栈和数据段寄存器指向同一段,小CS指向一个段,SS和DS指向另一个段),以及小型和紧凑型之间的差异(CS,SS和DS指向三个独立的段)但小型和中型之间的差异使我无法区分,因为CS指向一个段而SS和DS指向另一个段。

我意识到中型模型适用于具有多个代码段的程序,但这种差异是如何实现的?究竟是什么改变了?

1 个答案:

答案 0 :(得分:1)

从Turbo C ++内置帮助(菜单:选项 - >编译器 - >代码生成...->模型,按F1)

<强>小

将小型号用于平均尺寸应用。

代码和数据段不同且不重叠,因此您有64K代码和64K数据和堆栈。总是使用近指针。

<强>中

媒体模型最适合那些不会在内存中保留大量数据的大型程序。

远指针用于代码但不用于数据。因此,数据加堆栈限制为64K,但代码最多可占用1MB。

所以,你有它。在中型模型中,您使用远指针来访问代码(代码具有远程调用和远程返回指令并使用远程函数指针进行操作)并且您可以拥有多个段。标准的16位DOS .EXE文件格式支持多个段。在小型模型中,所有指针都在附近,因此您无法更改程序中的默认代码段。