Модель памяти C с ее использованием арифметики указателей и прочего, похоже, моделирует плоское адресное пространство. 16-битные компьютеры использовали сегментированный доступ к памяти. Как 16-битные компиляторы C справились с этой проблемой и смоделировали плоское адресное пространство с точки зрения программиста на C? Например, в какие примерно инструкции на языке ассемблера компилируется следующий код на 8086?
long arr[65536]; // Assume 32 bit longs.
long i;
for(i = 0; i < 65536; i++) {
arr[i] = i;
}