### Question 19.23

How can I allocate arrays or structures bigger than 64K?

A reasonable computer ought to give you transparent access to all available memory. If you're not so lucky, you'll either have to rethink your program's use of memory, or use various system-specific techniques.

64K is (still) a pretty big chunk of memory. No matter how much memory your computer has available, it's asking a lot to be able to allocate huge amounts of it contiguously. (The C Standard does not guarantee that a single object can be larger than 32K.) Often it's a good idea to use data structures which don't require that all memory be contiguous. For dynamically-allocated multidimensional arrays, you can use pointers to pointers, as illustrated in question 6.16. Instead of a large array of structures, you can use a linked list, or an array of pointers to structures.

If you're using a PC-compatible (8086-based) system, and running up against a 640K limit, consider using ``huge'' memory model, or expanded or extended memory, or malloc variants such as `halloc` or `farmalloc`, or a 32-bit ``flat'' compiler (e.g. djgpp, see question 18.3), or some kind of a DOS extender, or another operating system.

References: ANSI Sec. 2.2.4.1
ISO Sec. 5.2.4.1

Read sequentially: prev next up top

This page by Steve Summit // Copyright 1995 // mail feedback