问我如何分配大于 64K 的数组或结构?
答一个合理的计算机应该能让你透明地访问所有可用的内存。如果你不那么幸运,你可能需要重新考虑你的程序对内存的使用,或者使用各种系统特定的技术。
64K(仍然)是一大块内存。无论你的计算机有多少可用内存,要求能够连续分配大量内存都是一个很高的要求。(C 标准不保证单个对象可以为 32K 或更大,C99 为 64K。)通常,使用不需要所有内存都是连续的数据结构是个好主意。对于动态分配的多维数组,你可以使用指针的指针,如问题 6.16 和 20.2 所示。而不是一个大的结构数组,你可以使用链表,或者一个指向结构的指针数组。
如果你使用的是 PC 兼容(基于 8086)的系统,并且遇到了 64K 或 640K 的限制,可以考虑使用“huge”内存模型,或者扩展内存(expanded or extended memory),或者 malloc 的变体,例如halloc或farmalloc,或者使用 32 位“flat”编译器(例如 djgpp,见问题 18.3),或者某种 DOS 扩展程序,或者另一个操作系统。
参考文献:ISO Sec. 5.2.4.1
C9X Sec. 5.2.4.1