-2

Я понимаю, что 32-разрядные программы ограничены 4 ГБ оперативной памяти, потому что их указатели являются 32-разрядными. Почему их указатели 32-битные, даже в 64-битной системе? Почему указатели не могут хранить адреса памяти, например, в длинном типе данных вместо unsigned int?

1 ответ1

2

У вас есть несколько вопросов здесь:

  1. Почему указатели C не являются longs: потому что long - это две области памяти, более или менее склеенные между собой. Теперь ваш указатель - это действительно два указателя, с которыми, помимо того, что вы отбрасываете больше драгоценной рабочей памяти, сложнее работать. Это более или менее способ поддержки большей памяти для старых 8- и 16-битных компьютеров. Это используется в некоторых особых случаях, например в старых 32-разрядных версиях Windows Server.

  2. Почему 32-битные приложения в 64-битных системах не "продвигаются" до 64-битных: потому что, хотя они могут работать на небольших, простых программах, они могут очень хорошо нарушать пользовательские структуры данных и различные хаки, которые программист вводит в действие. Технически выполнимо взять двоичный файл и "перекомпилировать" его для 64-битной системы, но шансы на его отличную работу довольно низки по разным причинам. На самом деле мы этого не делаем, потому что приложение, безусловно, было разработано с максимальным объемом 4 ГБ, поэтому программист должен был к этому подготовиться.

Это действительно сложная проблема архитектуры, и мне пришлось упростить множество вещей. Лучше оставить это в "потому что это работает так"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .