On Cisco 2600, 3600, and 3700 series routers, the size of I/O memory is by default dynamically allocated during the boot, based on the size of the Cisco IOS Software image after decompression. The size of I/O memory is then checked against memory requirements for installed network modules. If the amount of I/O memory is insufficient for operation of installed network modules, the router will report a sequence of messages similar to this:
Not enough memory in the system for IO memory
IO memory available 4110105 required 5242880 _> 2600
SYSTEM INIT: INSUFFICIENT MEMORY TO BOOT THE IMAGE!