2

维基百科和其他资源描述了可用于 x86 平台(实模式)上的编译器的不同内存模型。

我可以看到小模型和小模型之间的区别(在小模型中,代码、堆栈和数据段寄存器指向同一段,在小 CS 指向一个段,SS 和 DS 指向另一个),以及小模型之间的区别和紧凑(CS、SS 和 DS 指向三个单独的段),但小型和中型之间的区别让我难以理解,因为 CS 都指向一个段,SS 和 DS 指向另一个段。

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

4

1 回答 1

1

从 Turbo C++ 内置帮助(菜单:Options->Compiler->Code Generation...->Model,按 F1)

小的

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

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

中等的

中型模型最适合在内存中保存的数据不多的大型程序。

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

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

于 2012-08-15T16:57:33.543 回答