Есть ли способ, которым размер указателя может быть изменен с 2 байтов? - PullRequest
1 голос
/ 24 октября 2010

Можем ли мы в любом случае изменить размер указателя с 2 байтов, чтобы он мог занимать более 2 байтов?

Ответы [ 4 ]

10 голосов
/ 24 октября 2010

Конечно, скомпилируйте для 32 (или 64) битной платформы: -)

Размер указателей зависит от платформы, он будет составлять 2 байта только на 16-битных платформах (которые широко не использовались более десяти лет - в настоящее время все основные [обновление] (рабочий стол / ноутбук / сервер) [/ update] платформы не менее 32 бит).

2 голосов
/ 24 октября 2010

Если размер указателя составляет 2 байта, это означает, что вы работаете в 16-разрядной системе.

Единственный способ увеличить размер указателя - использовать вместо этого 32-разрядную или 64-разрядную систему.(это будет означать любой настольный или портативный компьютер, созданный за последние 15 лет или около того).

Если вы работаете на каком-то встроенном устройстве, которое использует 16-разрядную версию, единственным вариантом будет переключение на другое устройство.который использует 32-битные (или просто живут с вашими 16-битными указателями).

1 голос
/ 24 октября 2010

Когда процессор называется «X-битным» (где X - 16, 32, 64 и т. Д.), То X относится к размеру регистра адресов памяти. Таким образом, 16-битная система имеет регистр адреса памяти 2 байта.

Вы не можете привести 4-байтовый адрес к чему-либо меньшему, потому что он потеряет часть того, на что указывает. (2-байтовый регистр адреса памяти может указывать только на 2 ^ 16 = 64 КБ памяти, тогда как 4-байтовый регистр может указывать на 2 ^ 32 = 4 ГБ памяти.)

Вы всегда можете «активизировать» (т. Е. Запустить 32-разрядное программное приложение на 64-разрядном компьютере), потому что нет потери в диапазоне указателя. Но вы никогда не можете уйти в отставку, поэтому 64-битные программы не работают в 32-битных системах.

0 голосов
/ 25 октября 2010

Думайте о указателе как о числе, только вместо фактического значения, используемого для вычисления, это номер «слота» на карте памяти системы.

Указатель должен быть в состоянии представлять самую высокую позицию карты памяти. То есть он должен иметь как минимум количество байтов, необходимое для представления номера самой высокой позиции.

В 16-битной системе максимально возможная позиция равна 0xFFFF (16-битное число со всеми битами, установленными в 1). Указатель также должен иметь 16 битов, чтобы он мог достичь этого числа.

Обобщая, в X-битной системе указатель будет иметь биты X.

Вы можете сохранить указатель в переменной большего размера, так же, как вы можете сохранить число 1 в char, int или unsigned long long, если хотите; но в этом нет особого смысла: подумайте, точно так же, как более короткий указатель не сможет достичь самой высокой позиции в памяти, более длинный указатель сможет указывать на вещи, которые на самом деле не могут существовать в памяти, так зачем это?

Кроме того, для этого вам придется «обмануть» компилятор. Если вы используете обозначение указателя в своем коде, компилятор всегда будет использовать для него правильное количество байтов. Однако вы можете указать компилятору компилировать для другой платформы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...