В DOS 16 бит, я не помню, чтобы я мог это сделать. У вас может быть несколько вещей, каждая из которых имеет размер 64 КБ (потому что сегмент может быть скорректирован, а смещение обнулено), но не помните, можно ли пересечь границу одним массивом. Простое пространство памяти, в котором вы могли бы умышленно выделять все, что вы хотели, и вбирать в массив столько, сколько захотите, не происходило, пока мы не смогли скомпилировать 32-битные программы DOS (на 386 или 486 процессорах). Возможно, другие операционные системы и компиляторы, кроме Microsoft и Borland, могут генерировать плоские массивы размером более 64 КБ. Win16 Я не помню эту свободу до тех пор, пока не победил win32, возможно, моя память стала ржавой ... Вам все-таки повезло или вы имели богатый мегабайт памяти, машина размером 256 или 512 Кбайт не была неслыханной. В конечном итоге ваш дисковод имел долю от мегабайта до 1,44 мегабайта, а на жестком диске - дюжину или несколько мегабайт, так что вы просто не рассчитывали такое большое количество раз.
Я помню конкретную проблему, которую я узнал о DNS, когда вы могли загрузить всю базу данных DNS всех зарегистрированных доменных имен на планете, фактически вам пришлось установить собственный DNS-сервер, который почти требовался в то время, чтобы есть веб-сайт. Этот файл был 35 мегабайт, а мой жесткий диск был 100 мегабайт, плюс DOS и Windows, пережевывая некоторые из этого. Вероятно, имел 1 или 2 мегабайта памяти, мог бы в то время выполнять 32-битные программы. Часть, если бы я хотел проанализировать файл ascii, который я сделал за несколько проходов, но каждый проход вывод должен был идти в другой файл, и мне пришлось удалить предыдущий файл, чтобы иметь место на диске для следующего файла. Два дисковых контроллера на стандартной материнской плате, один для жесткого диска и один для дисковода компакт-дисков, и здесь этот материал был не дешевым, не было много свободных слотов isa, если бы вы могли позволить себе другой жесткий диск и плату контроллера диска.
Была даже проблема чтения 64 Кбайт с помощью C, который вы передали fread с количеством байтов, которые вы хотели прочитать в 16-битном int, что означало от 0 до 65535, а не 65536 байт, и производительность резко упала, если вы не читали в четном размере секторов, так что вы просто читаете 32 Кбайт за раз, чтобы максимизировать производительность, 64 Кб не доходили до тех пор, пока не прошли дни dos32, когда вы окончательно убедились, что значение, передаваемое в fread, теперь стало 32-битным числом, и компилятор не собирался отрубать верхние 16 биты и использовать только младшие 16 бит (что часто случается, если вы использовали достаточно компиляторов / версий). В настоящее время мы сталкиваемся с аналогичными проблемами при переходе с 32-разрядного на 64-разрядный режим, как и при переходе с 16-разрядного на 32-разрядный. Что наиболее интересно, так это код от таких людей, как я, который узнал, что переход с 16 на 32 бита int изменил размер, но беззнаковые char и unsigned long этого не сделали, поэтому вы адаптировали и редко использовали int, чтобы ваши программы компилировались и работали для и 16 и 32 бит. (Код от людей этого поколения выделяется среди других людей, которые тоже пережили его и использовали тот же трюк). Но для перехода с 32 на 64 все наоборот, и код, не подвергнутый рефакторингу для использования объявлений типов uint32, страдает.
Читая ответ Уоллика, который только что пришел, огромная вещь-указатель, обернутая вокруг, звонит в колокольчик, также не всегда имея возможность компилировать для огромных. маленькой была плоская модель памяти, с которой нам сегодня комфортно, а с сегодняшним днем это было легко, потому что вам не приходилось беспокоиться о сегментах. Так что было желательно собрать для малого, когда вы могли. У вас все еще не было много памяти, дискового или дискового пространства, поэтому вы обычно не имели дело с такими большими данными.
И, согласившись с другим ответом, смещение сегмента составляло 8088/8086 Intel. Intel еще не доминировала во всем мире, поэтому существовали и другие платформы, которые имели ограниченное пространство памяти или использовали другие хитрости, возможно, в аппаратном обеспечении (вне процессора) для решения проблемы. Из-за сегмента / смещения Intel смогла ездить на 16-битной вещи дольше, чем она, вероятно, должна была бы. Сегмент / смещение имели некоторые интересные и интересные вещи, которые вы могли бы сделать с ним, но это было так же больно, как и все остальное. Вы либо упростили свою жизнь и жили в плоском пространстве памяти, либо постоянно беспокоились о границах сегментов.