Непонятно, с чего вы взяли, что смещение хранится в одном типе, а указатель в другом? И зачем вы мне ссылки приводите. которые я сам в первом посте опубликовал?
Указатели на память, массивы и тд хранятся в битах, а о том, как эти биты интерпретировать, вы решаете сами. Если нужно сравнить - то как uintptr_t, если получить разницу - то как intptr_t.
Пока это самое логичное объяснение, т.к. даже в стандарте C++ это не разъясняется, а в код GCC я, пожалуй, не буду пока лезть.
Antony: что мешает СМЕЩЕНИЕ хранить в знаковом типе, и АДРЕС - в беззнаковом? Или смещение тоже хранить в знаковом, при это отметив флагом, что это не адрес, а смещение относительно чего-либо? Или вообще запретить за пределами размерности выделять адрес?
Ivan Sokolov: Ну отлично, что регистру пофиг. Только при чём тут C++? Он не работает с регистрами, он работает с типами. Которые непонятно зачем знаковые.
Простите, не понял. Переменная, как я понимаю, должна уметь содержать КОНКРЕТНЫЙ АДРЕС максимального возможного значения памяти, т.е. 2^32 - 1. При чём тут смещение?
Спасибо за ответ. Почитал про дополнительный код. Там тоже есть бит знака, никуда он не делся. И там тоже в байт со знаком влезает от 127 до -128. И этот код нужен, как я понял, для того, чтобы снизить сложность ПРОЦЕССОРА, а не ПО. В общем, пока вопрос открытый.
Меня сейчас не холивары интересуют, а нечто другое. Вот, решили, например, в Netscape, что надо бы добавить возможность скриптования в свой Navigator и кто-то за пару вечеров сделал как мог скриптовый язык, понадёргали разных фич, как-то слепили, назвали JavaScript - потому, что тут тоже скобочки фигурные и как-бы это младший брат Java, который активно пиарила Sun. Хотя это не так. И вот, безо всяких стандартов и комиссий создали нечто удовлетворительное. Клепали часики на сайтах, снежинки падали - всё такое. И что потом? Почему MS решила этот язык в своём IE внедрить, а не пилить свой? Opera та же? Как решили внедрять XmlHttpRequest? Кто и для чего это придумал? Как стали возникать первые фреймворки? Почему стандартом стал jQuery, хотя как сейчас помню - в популярных в то время тестах на производительность он почти всем "сливал"? Он удобнее других оказался, или его какая-то киллер-фича вытащила? И т.д. и т.п. ...
Ведь наверняка есть люди, которые через это всё прошли - интересно их мнение.
Спасибо за статью. Не согласен с тем, что история не интересна - как по мне на хабре подобные обзорные статьи собирают много плюсов. И зачем минусовать исторический обзор, пусть даже поданный через призму личного опыта?
Указатели на память, массивы и тд хранятся в битах, а о том, как эти биты интерпретировать, вы решаете сами. Если нужно сравнить - то как uintptr_t, если получить разницу - то как intptr_t.
Пока это самое логичное объяснение, т.к. даже в стандарте C++ это не разъясняется, а в код GCC я, пожалуй, не буду пока лезть.