There was a question like this before, in 2011: Exotic architectures the standards committees care about
Now, I\'d like to ask a very similar question, but this time
Random examples:
AVR GCC has only 32 bit doubles. So GCC targeting Atmel AVR microcontrollers deviates from the Standard. (They deviate even more if -mint8
is set.) Arduinos are based on ATmega328s, which are AVRs. I hear there are a lot of Arduinos "in the wild".
8051/80251 family microcontrollers have bit-addressable memory. This storage is also accessed with different widths through other ranges of addresses. The memory model is explicitly nonlinear. Even trying to limit discussion of these to wildly successful parts yields a list longer than I'm willing to transcribe here. Start here and keep reading and following the references. Approximate number in the wild: too many.
x86 32-bit protected mode allows 48-bit segment:offset pointers. Digital Mars C++ exposes these via __far
, __huge
, and __handle
when targeting 32-bit. See Table 7.2 at Digital Mars's "Choosing a Memory Model". So even the "x86 world" has nonlinear memory. This was present since the Pentium, so "all the computers" would be a starting estimate for the number of these in the wild (and is the right order of magnitude).
One of the standard examples of nonlinear memory is the MC68000. (Exception thrown for odd addresses because there isn't even a pin for bit0 on the address bus.) The TI-89 and -92 calculators were built on the MC68000. There were several million of each sold (and many are still in use).