18.9怎样分配大于64K的数组或结构?
一台合理的电脑应该可以让你透明地访问所有的有效内存。如果, 你很不幸, 你可能需要重新考虑程序使用内存的方式, 或者用各种针对系统的技巧。
64K 仍然是一块相当大的内存。不管你的电脑有多少内存, 分配这么一大段连续的内存是个不小的要求。标准C 不保证一个单独的对象可以大于32K, 或者C99 的64K。通常, 设计数据结构时的一个好的思想, 是使它不要求所有的内存都连续。对于动态分配的多维数组, 你可以使用指针的指针, 在问题6.13 中有举例说明。你可以用链接或结构指针数组来代替一个大的结构数组。
如果你使用的是PC 兼容机(基于8086) 系统, 遇到了64K 或640K的限制, 可以考虑使用“huge” (巨大) 内存模型, 或者扩展或延伸内存, 或malloc 的变体函数halloc() 和farmalloc(), 或者用一个32 比特的“平直” 编译器(例如djgpp, 参见问题18.3), 或某种DOS 扩充器, 或换一个操作系统。
64K 仍然是一块相当大的内存。不管你的电脑有多少内存, 分配这么一大段连续的内存是个不小的要求。标准C 不保证一个单独的对象可以大于32K, 或者C99 的64K。通常, 设计数据结构时的一个好的思想, 是使它不要求所有的内存都连续。对于动态分配的多维数组, 你可以使用指针的指针, 在问题6.13 中有举例说明。你可以用链接或结构指针数组来代替一个大的结构数组。
如果你使用的是PC 兼容机(基于8086) 系统, 遇到了64K 或640K的限制, 可以考虑使用“huge” (巨大) 内存模型, 或者扩展或延伸内存, 或malloc 的变体函数halloc() 和farmalloc(), 或者用一个32 比特的“平直” 编译器(例如djgpp, 参见问题18.3), 或某种DOS 扩充器, 或换一个操作系统。