20.27 怎样分配大于 64K 的数组或结构?

一台合理的电脑应该可以让你透明地访问所有的有效内存。如果, 你很不幸, 你可能需要重新考虑程序使用内存的方式, 或者用各种针对系统的技巧。

64K 仍然是一块相当大的内存。不管你的电脑有多少内存, 分配这么 一大段连续的内存是个不小的要求。标准 C 不保证一个单独的对象可以 大于 32K, 或者 C99 的 64K。通常, 设计数据结构时 的一个好的思想, 是使它不要求所有的内存都连续。对于动态分配的多维 数组, 你可以使用指针的指针, 在问题 6.13 中有举例说明。 你可以用链接或结构指针数组来代替一个大的结构数组。

如果你使用的是 PC 兼容机 (基于 8086) 系统, 遇到了  64K 或 640K的限制, 可以考虑使用 ``huge"  (巨大) 内存模型, 或者扩展或延伸内存, 或 malloc 的变体函数  halloc() 和 farmalloc(), 或者用一个 32 比特 的 ``平直" 编译器 (例如 djgpp, 参见问题 18.3), 或某种 DOS 扩充器, 或换一个操作系统。

参考资料: [ISO, Sec. 5.2.4.1]; [C9X, Sec. 5.2.4.1]。

翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)