【问题标题】:What's the difference between the small memory model and the medium memory model?小内存模型和中内存模型有什么区别?
【发布时间】:2012-08-11 21:11:01
【问题描述】:

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

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

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

【问题讨论】:

  • 对于中型模型,jmp 将使用远地址,而不是近地址。

标签: assembly compiler-construction x86


【解决方案1】:

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

将小型模型用于中等大小的应用程序。

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

中等

中型模型最适合内存中没有太多数据的大型程序。

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

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

【讨论】:

    猜你喜欢
    • 2012-11-27
    • 2013-08-27
    • 2010-12-23
    • 2012-09-15
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    相关资源
    最近更新 更多