I read on Wikipedia that 80386 could theoretically handle 4GiB of RAM. Knowing how long ago that was, I find it impossible to believe that anyone could actually connect as much to the CPU. So, given the constraints from motherboards and actual RAM chips existing at that time, how much RAM could one put together with an 80386?
I very much doubt that anyone would ever have seriously considered fitting 4 GiB in a 386-based system, let alone designing such a beast. (To put this into context, I remember seeing early 1 GiB Alpha servers on the factory floor of Digital’s plant in Scotland in 1994, and those machines were priced at around $250,000...)
The Red Hill hardware guide provides a number of examples. 386SX systems were limited to 16 MiB at most anyway, because of the limited number of address lines. For 386DX systems, a common configuration included 8 SIMM slots, for up to 32 MiB of RAM, but Red Hill’s golden oldies page lists one SIPP-based motherboard which might have been usable with 64 MiB. Some manufacturers produced expansion boards to add more memory — e.g. ALR systems had expansion boards supporting up to 48 MiB each. In early 1993, in the US, 4 MiB of RAM cost over $100.
I bought a 386DX/33 in 1992, with 8 MiB of RAM out of a maximum 32 MiB, and that was considered large at the time — enough to run Windows 3.1 or OS/2 very comfortably. I kept that system for four years, eventually switching to Linux, and never needed to add more memory.
In those days, even servers had “small” base configurations as presented in advertisements — see this 1990 ALR advert with a 386/33 and 5 MiB of RAM for a cool $6,290...
We can see the datasheet of the 386DX here. The most important part is its pinout.
We have address lines from A2 to A31. It means, that yes, it could have handled 4GB memory on a motherboard. Although it is very unlikely, that any ordinary PC motherboard had been built with the required number of memory sockets at the time.
It is more likely, that it was used at most to make memory-mapped IO easier in embedded environments.1
(A0 and A1 are missing, because the cpu could address only 4byte memory operations. Essentially, it was an only 30-bit CPU, working with 32-bit "bytes". This trick is usual since the early 16-bit era.)
For example, the Weitek Abacus FPU was memory-mapped to
0x0C000000. Floating-point calculations could be done by writing the commands into a 64kB-block starting at far higher as any physical RAM ever could end (at the time... 192MByte), and then reading out the result with
As someone who had a 386, I was happy just to upgrade from 4MB RAM to 8MB RAM. Just think of all the cool things I can do now?! At that point, my motherboard could not contain anymore RAM IC's, so the only way to upgrade further would have been to get denser chips. But by the time I needed more RAM I was on to a 486. Yes, you're correct about the theoretical maximum but, at least for consumer level machines, ain't nobody doin' that.