|
1
2
特别是关于
它是一个 扩展内存管理器 ,它将大于1MB的内存分页到大于640K的“高内存”区域中-该区域的大小仅为384KB,并非所有这些区域都可用于内存分页,这可能是您通过实验观察到的300KB限制的原因。 为了充分利用代码和数据的内存资源,有必要使用dpmi(dos保护模式接口)。dpmi程序是一个真正的32位保护模式程序,具有访问dos api的机制(这是windows 3.x在windows 95本身成为操作系统之前的工作方式,而不是dos上的图形环境)。 dpmi程序在中运行处理器 受保护的 而不是那时 真实的 模式。有两种保护模式:16位80286保护模式(dpmi16)和32位80386保护模式(dpmi32),这稍微有点复杂。在你的情况下,你只需要关心DPMI32。 对于borland编译器,dpmi通过 DOS电源组 工具。然而,电源包设计工作与Borland C++ 4.02和4.5x,而不是5。 This technical note ,说明如何在BC++5中使用电源组,但建议不要使用。它声明它只适用于命令行工具,而不是IDE。上面写着 other technical note 然后解释如何在ide中工作,但是解释bc++5rtl将不工作。总的来说,这听起来不像是一次愉快的经历。 然而,根本不需要考虑切换到Linux—您只需要使用支持DPMI32的工具链,并允许您在DOS环境中将代码构建为真正的32位代码。 合适的工具链可能包括:
除DJGPP外,上述所有内容均需要第三方 DOS扩展器 (dpmi主机)其中一些已列出 here . DJGPP包括一个扩展器(如前所述 here ,因此,如果不是最现代的话,这可能是最简单的选择。参考工具链文档以确定您需要什么。使用第三方扩展器的问题是,虽然编译器可能继续可用,但扩展器可能会消失(我认为Digital Mars就是这样)。 |
|
|
2
1
好的旧dos只设置为使用640kib内存,地址空间只增加到1 mib。 新技术包括 "unreal mode" (这是我第一次听到,但在我看来是合乎逻辑的)。 但是在dos时代,你必须使用ems和/或xms。 这些是访问可用内存窗口之外的内存的技术。 ems有内存窗口,可以在其中映射额外内存的页面。 在xms中,有一个特殊的函数帮助您使用特定的函数地址将数据从内存复制到内存。 |