The maximum random access memory (RAM) installed in any computer system is limited by hardware, software and economic factors. The hardware may have a limited number of address bus bits, limited by the processor package or design of the system. Some of the address space may be shared between RAM, peripherals, and read-only memory. In the case of a microcontroller with no external RAM, the size of the RAM array is limited by the size of the integrated circuit die. In a packaged system, only enough RAM may be provided for the system’s required functions, with no provision for addition of memory after manufacture.
Software limitations to usable physical RAM may be present. An operating system may only be designed to allocate a certain amount of memory, with upper address bits reserved to indicate designations such as I/O or supervisor mode or other security information. Or the operating system may rely on internal data structures with fixed limits for addressable memory.
For mass-market personal computers, there may be no financial advantage to a manufacturer in providing more memory sockets, address lines, or other hardware than necessary to run mass-market software. When memory devices were relatively expensive compared with the processor, often the RAM delivered with the system was much less than the address capacity of the hardware, because of cost.
Sometimes RAM limits can be overcome using special techniques. Bank switching allows blocks of RAM memory to be switched into the processor’s address space when required, under program control. Operating systems routinely manage running programs using virtual memory, where individual program operate as if they have access to a large memory space that is being simulated by swapping memory areas with disk storage.
For performance reasons, all the parallel address lines of an address bus must be valid at the same time, otherwise access to memory would be delayed and performance would be seriously reduced. Integrated circuit packages may have a limit on the number of pins available to provide the memory bus. Different versions of a CPU architecture, in different-sized IC packages, can be designed, trading off reduced package size for reduced pin count and address space. A trade-off might be made between address pins and other functions, restricting the memory physically available to an architecture even if it inherently has a higher capacity. On the other hand, segmented or bank switching designs provide more memory address space than is available in an internal memory address register.
As integrated circuit memory became less costly, it was feasible to design systems with larger and larger physical memory spaces.
Microcontroller devices with integrated I/O and memory on-chip sometimes had no, or a small, address bus available for external devices. For example, a microcontroller family available with a 2 kilobyte address space might have a variant that brought out an 11 line address bus for an external ROM; this could be done by reassigning I/O pins as address bus pins. Some general-purpose processors with integrated ROM split a 16-bit address space between internal ROM and an external 15-bit memory bus.
Some very early computers also had CPUs with fewer than 16 address pins: The MOS Technology 6507 (a reduced pin count version of the 6502) was used in the Atari 2600 and was limited to a 13-line address bus.
Most 8-bit general-purpose microprocessors have 16-bit address spaces and generate 16 address lines. Examples include the Intel 8080, Intel 8085, ZilogZ80, Motorola 6800, Microchip PIC18, and many others. These processors have 8-bit CPUs with 8-bit data and 16-bit addressing. The memory on these CPUs is addressable at the byte level. This leads to a memory addressable limit of 216 × 1 byte = 65,536 bytes or 64 kilobytes.
The Intel 8086 and derivatives, such as the 8088, 80186 and 80188 form the basis of the popular x86 platform and are the first level of the IA16 architecture. These were 16-bit CPUs with 20-bit addressing. The memory on these CPUs were addressable at the byte level. These processors could address 220 bytes (1 megabyte).