- 主题:HIMEM.SYS 也是有限制的
DOS 能管理的内存最大限制是 65MB,因为 himem.sys 申请内存时,会返回一个 int16 的数字作为 HANDLE,这个值代表着实际着内存地址,单位是 1KB. int16 的最大值是 65535,加上最低的 1MB,所以最终算出 DOS 能够管理的最大内存是 65MB.
EMM386.EXE 映射的是 HIMEM.SYS 分配的内存。所以共享同样的限制。
我算的没错吧?
--
修改:hgoldfish FROM 27.148.57.*
FROM 27.148.57.*
可以完全不加载微软家的himem和emm386,只用QEMM一个设备驱动就可以全搞定……
ps:DOS下面,有哪些常见程序(所以排除windows3.x)是单纯调用XMS,而不用EMS的呢?
【 在 hgoldfish 的大作中提到: 】
: DOS 能管理的内存最大限制是 65MB,因为 himem.sys 申请内存时,会返回一个 int16 的数字作为 HANDLE,这个值代表着实际着内存地址,单位是 1KB. int16 的最大值是 65535,加上最低的 1MB,所以最终算出 DOS 能够管理的最大内存是 65MB.
:
: ..................
--
FROM 111.31.163.*
这俩 API 不是互斥的吗?需要一个就不需要另外一个?
【 在 mephistoxp 的大作中提到: 】
: 可以完全不加载微软家的himem和emm386,只用QEMM一个设备驱动就可以全搞定……
: ps:DOS下面,有哪些常见程序(所以排除windows3.x)是单纯调用XMS,而不用EMS的呢?
--
FROM 120.37.23.*
freedos 说它家的 himemsx.sys 可以使用 PAE 管理到 1TB 内存。
这是为啥呢?这么大的内存,XMS API 也用不了啊。
【 在 hgoldfish 的大作中提到: 】
: DOS 能管理的内存最大限制是 65MB,因为 himem.sys 申请内存时,会返回一个 int16 的数字作为 HANDLE,这个值代表着实际着内存地址,单位是 1KB. int16 的最大值是 65535,加上最低的 1MB,所以最终算出 DOS 能够管理的最大内存是 65MB.
: EMM386.EXE 映射的是 HIMEM.SYS 分配的内存。所以共享同样的限制。
: 我算的没错吧?
: ...................
--
FROM 120.37.23.*
啥新的 API,哪里有文档呢?给个提示词我查查?
那我理解的旧的 XMS API 只能管理到 65MB 内存没错吧?
edit: 从 himemsx.sys 的 github 项目里面看到了。
【 在 kirbyzhou 的大作中提到: 】
: 它有新的API
--
修改:hgoldfish FROM 120.37.23.*
FROM 120.37.23.*
API是我想当然了,
不过65M是实现限制不是API限制。
65535个句柄*65535个unit*1k的unit大小 = 4T呢
【 在 hgoldfish 的大作中提到: 】
: 啥新的 API,哪里有文档呢?给个提示词我查查?
: 那我理解的旧的 XMS API 只能管理到 65MB 内存没错吧?
: edit: 从 himemsx.sys 的 github 项目里面看到了。
: ...................
--
修改:kirbyzhou FROM 114.247.175.*
FROM 114.247.175.*
smartdrv呀,不依赖emm386的.
然后国产的一堆中文系统,字库加载到xms,也是不依赖ems的
【 在 mephistoxp 的大作中提到: 】
: 可以完全不加载微软家的himem和emm386,只用QEMM一个设备驱动就可以全搞定……
: ps:DOS下面,有哪些常见程序(所以排除windows3.x)是单纯调用XMS,而不用EMS的呢?
--
修改:kirbyzhou FROM 114.247.175.*
FROM 114.247.175.*
63+1k * 1k = 63+1 MB,
怎么算出 4T ?
【 在 kirbyzhou 的大作中提到: 】
: API是我想当然了,
: 不过65M是实现限制不是API限制。
: 65535个句柄*65535个unit*1k的unit大小 = 4T呢
: ...................
--
FROM 120.37.23.*
我查了一下 XMS 的 API,是这样的:
XMS 2.0 使用 WORD 寄存器来表示 HANDLE,所以只能管理到 63+1 MB
XMS 3.0 使用 int32 寄存器来表示 HANDLE,所以能管理到 4TB,不过 32 位计算机只能 4GB 可用。
FreeDOS 的 HIMEMSX.SYS 弄了个 XMS 3.5 API,连 PAE 技术都用上了简直丧心病狂。
【 在 kirbyzhou 的大作中提到: 】
: API是我想当然了,
: 不过65M是实现限制不是API限制。
: 65535个句柄*65535个unit*1k的unit大小 = 4T呢
: ...................
--
修改:hgoldfish FROM 120.37.23.*
FROM 120.37.23.*
你为啥乘1k啊,要乘65535k
Allocate Extended Memory Block (Function 09h):
----------------------------------------------
ARGS: AH = 09h
DX = Amount of extended memory being requested
in K-bytes
RETS: AX = 0001h if the block is allocated,
0000h otherwise
DX = 16-bit handle to the allocated block
【 在 hgoldfish 的大作中提到: 】
: 63+1k * 1k = 63+1 MB,
: 怎么算出 4T ?
--
修改:kirbyzhou FROM 114.247.175.*
FROM 114.247.175.*