Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

The theoretical memory limits in 16, 32 and 64 bit machines are as follows:

  • 16 bit = 65, 536 bytes (64 Kilobytes)

  • 32 bit = 4, 294, 967, 295 bytes (4 Gigabytes)

  • 64 bit = 18, 446, 744, 073, 709, 551, 616 (16 Exabytes)

I remember from DOS / Windows 3.11 days, that 16 bit memory could be separated into segments, so that a 16 bit machine could access a greater amount of memory than 64 Kilobytes.

I have a machine with 16GB of memory, and am dual booting a 32bit operating system and a 64bit operating system. I can access all 16GB from 64bit, but only 3.21GB in 32bit.

So, my question is, if 16bit operating systems allowed greater that 64KB memory access due to memory segmenting, why do 32bit machines not follow the same pricipal?

share|improve this question
The limits you listed are not actually the theoretical limits of those operating systems. The main reason these operating systems even have limits is because %99.99 of the market for example didn't even have 4GB of memory. Windows Server memory limits are example where there literally does not exist hardware that supports beyond the memory limits the operating system itself supports. Intel and AMD could easily extend x86 to fully supports PAE if they wanted, of course, they really don't need to now that 64-bit operating system works EXACTLY like a 32-bit operating system. – Ramhound Feb 22 '13 at 23:25
@Ramhound, not entirely sure what you mean by "not actually theoretical limits", maybe "theroetical" was the wrong word to use here, though I'm sure you understand where the values come from. – series0ne Feb 23 '13 at 22:50
As already pointed those limits are often imposed by the operating system license and realistic system configurations. The point of my comment is to point out the limits you are asking about are not the actually memory limits for those systems. – Ramhound Feb 24 '13 at 19:50
up vote 4 down vote accepted

They do, the system is called Physical Address Extension (PAE). Here is a list of windows OS'es and their max memory, any 32 bit system that allows for more than 4GB of RAM is using PAE to access the memory (For example Windows 2003 R2 Datacenter 32 bit allows for 128GB of ram).

In fact Windows 8 requires a PAE capable CPU in it's minimum requirements.

To address your "unasked" question on why your 32 bit OS can't access the ram if it exists: Licensing. They choose not to allow RAM to be above 4GB for their 32 bit OSes unless you pay for a data-center edition (that is why they sell a data-center edition, if you need that much ram, you likely can afford to spend more money on a OS).

share|improve this answer
Ah I've heard of PAE before but never investigated it. It appears to be largely used in server architecture, so does not seem to apply to a Windows 7 32bit installation, as the list specifies that W7x86 only allows up to 4GB – series0ne Feb 22 '13 at 22:09
@series0ne: this is a licensing issue. Scott even mentions this in his answer. – 0xC0000022L Feb 22 '13 at 22:23
@0xC0000022L to be fair, I added the license part as a edit after his comment, but due to the 4 min edit window it looks like I posted it before he posted the comment. – Scott Chamberlain Feb 22 '13 at 22:27
@series0ne PEA also applied to win XP 32 bit, so not only server OS'ses. It got removed in windows 7 (and maybe already in vista) because it no longer is needed. 64 bit CPUs have been in use since ~1979 and they are now that common that it is safe to assume every newly installed computer has one and thus the X64 version can be used with much less hassle. – Hennes Feb 23 '13 at 0:29
PAE requires page table switcheroo to work, and that is costly in terms of performance. – vonbrand Feb 23 '13 at 1:42

Instead of explaining it myself, I'll let someone who has to maintain a kernel with PAE support speak in his charming ways, Linus Torvalds

Also keep in mind that the PAE support in Windows 32bit versions comes for a lot of cash. XP won't even be able to make use of full 4 GiB of RAM normally, because MS chose to not enable PAE features on it. A kernel that is closely related, Windows 2003 Server, does support PAE. However, even there your "Standard edition" will only support up to 4 GiB (but working around the BIOS memory hole), whereas the more expensive editions will then allow up to 64 GiB of RAM. The same holds for 32-bit Vista.

However, not in all cases is this limitation imposed by Windows. If it were, booting a PAE-enabled Linux kernel would still enable you to use the full 4 GiB (or more). Not so, some hardware manufacturers chose to impose this limitation at the BIOS level, although the CPU and chipset would be capable of handling PAE.

Just a side-note: none of the current x86-based 64bit processors can even address the full range of the 64bit address space physically (for reference see this question and answers).

share|improve this answer
Very cool read in the link, thanks for it! – Scott Chamberlain Feb 22 '13 at 22:26
+1 For the link – Dougvj Feb 23 '13 at 1:34
Hmm, why do I get the impression that Linus really hates HIGHMEM.SYS and PAE? :P – Karan Feb 24 '13 at 2:02
I understand that PAE would be a nuisance for any code which needed more than a couple gigs of working set, and for system-level code that needs to manage multiple tasks of 2 gigs or so each, but unless a single application needs more than 2 gigs I would expect PAE to be transparent. Further, I would think PAE would also be better than global use of 64-bit pointers in cases which needed 3 gigs of general-purpose RAM plus a large disk cache or temp-storage drive. – supercat May 6 '14 at 17:27
Linus's comments are strange. There is no relationship between how himem.sys works and how PAE works. It is very amusing to see people argue for x64 and against PAE addressing... when x64 long mode simply takes the PAE scheme and adds one more level of page table! – Jamie Hanrahan Aug 8 '14 at 21:21

Because there is no practical reason to do so. Physical Address Extensions allow much the same functionality and their use is still very limited amongst users. In the Windows 3.1 days there were constraints that just aren't present today.

share|improve this answer
This really does not have enough information to backup your statements. Windows 3.1 is a 16-bit operating system. One must remember that in 1992 2MB of memory was over $300. – Ramhound Feb 22 '13 at 23:26
You're Feb 22 comment, and Scott Chamberlin's explanation pretty much cover what I was driving at. They do leave out descriptions of why extensible segmented pagination was used in DOS/Win16, but not in later Windows. I didn't include that, because it would not contribute directly to answering the OP's question. – OCDtech Mar 7 '13 at 15:08
Its my view that answers should stand alone. Your comment adds enough information to resolve my problems with your answer. – Ramhound Mar 7 '13 at 15:51
@OCDtech: The 8086 segmented model would allow an object-oriented language to use 2-byte object references to identify objects aligned on 16-byte boundaries, but languages were not well-equipped to use segments effectively. The 80286 model imposes monstrously-greater overhead to such programs, and the way it was extended on the 80386 would make a segment-per-object scheme totally useless. – supercat May 6 '14 at 17:29

8-bit CPUs usually had a 16-bit address bus. (Motorola had a unified address bus, RAM and peripheral I/O shared the same address space, Intel chose to divide the two. In the case of Intel, the IO address limits of the 8088 and 8086 carried the limits over from the 8080 & 8085 CPUs.)

Intel's 8088 and 8086 had a 20-bit memory address bus(1MB), while Motorola's 68000 had a 24-bit address bus (16 MB). IIRC, the [80]286 jumped to a 24-bit address bus. Both later expanded to a 32-bit address bus with the [80]386 and the 68020 respectively.) With the Pentium chips, the address bus expanded to 64-bits. (I think the Motorola/IBM venture PowerPC chips also went 64-bit address bus.)

Memory available below and up to the maximum that could directly be accessed by the CPU was only limited by the supporting hardware chips (chipset) and OS. Bill Gates was famous in the past for stating that nobody needed more than 640K of RAM, thus DOS never evolved to directly access more RAM. With HiMem.sys and EMM386, DOS was extended to access more "upper" memory, with EMM386 being used to directly access all available RAM. HiMem.sys had less flexibility and could basically use the extra RAM for storage.

Memory exceeding that limit required a MMU (Memory Management Unit) to break the memory into segments and map it into the addressable memory space of the CPU. It's how the CoCo 3, Commodore 128, and other 8-bit computers could access more than 64K of RAM.

More favorable now is to use virtual memory to extend past physical memory limits, albeit with the limits imposed by the OS.

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .