» Программирование>Срочная помощь программистов и тема для флуда по тематике раздела
Spectator 19:12 11.06.2013
Сообщение от manifest:
Ну и мой пример для кучи раз википедия не авторитет.
Да не закидывайте меня этим. Я в курсе. Я следил за развитием событий еще когда разрабатывался компилятор первый под 64 битные процессоры. Там были дикие и жуткие споры - как быть, как правильно и как надо. В итоге победила дружба, позволившая компилировать и запускать программы без полной переделки. И это единственная причина, почему вот так сделали. Затычка, не более того.
[Ответ]
aerin 19:15 11.06.2013
Spectator, не надо лирики. Тебе привели контрпримеры и выдержку из стандарта, а ты все сопли пузырями надуваешь.
[Ответ]
manifest 19:17 11.06.2013
Сообщение от Spectator:
Да не закидывайте меня этим. Я в курсе. Я следил за развитием событий еще когда разрабатывался компилятор первый под 64 битные процессоры. Там были дикие и жуткие споры - как быть, как правильно и как надо. В итоге победила дружба, позволившая компилировать и запускать программы без полной переделки. И это единственная причина, почему вот так сделали. Затычка, не более того.
Сообщение от Spectator:
1. обязан
2. обязан
3. как Вы их вообще разделяете???? в 32 битных процессорах, чтобы не усложнять вопрос. указатель - pointer, это переменная, которая хранит адрес ячейки памяти.
Опять 25. Умело включил дурака, и отказывается от своих же аргументов. Ну и хрен бы с тобой, дальше уже не интересно.
3 указатель может быть индексом некой таблицы в которой компилятор держит информацию о местоположении данных в рантайм режиме, хотя кому я это об'ясняю...
[Ответ]
уже приводил обе ссылки.
я сразу говорю - давайте не будем излишне переходить на личности.
это Holy War и надо это понимать. Истины не будет.
Далее. Сформулируем предмет спора, мы выясняем каков должен быть размер int при платформе 64 бита. С указателем всё понятно, сегментов у нас нет и не планируется, так что тут 64 бита без вариантов. Определяемся с интом.
Сообщение от MadFish:
Опять 25. Умело включил дурака, и отказывается от своих же аргументов. Ну и хрен бы с тобой, дальше уже не интересно.
3 указатель может быть индексом некой таблицы в которой компилятор держит информацию о местоположении данных в рантайм режиме, хотя кому я это об'ясняю...
Никто ничего не включал. Про индексы и таблицы я уже говорил - это из другой оперы. Такие таблицы использовались НЕ КОМПИЛЯТОРОМ, а ПРОЦЕССОРОМ, до появления 32 битных процессоров, когда количество памяти превышало теоретически допустимое при такой разрядности.
Как в случае Z80, к примеру и 128 К памяти.
Компилятор в рантайме хранить ничего не может, извините. Он там немножко не задействован. Не стоит путать виртуальную машину и компилятор.
[Ответ]
The standard doesn't specify type sizes, because C and C++ should be able to run on ANY machine, including machines where bytes are defined as 10 bits, 128 bits, or even with some fancy non-binary tri-bits. As such, the standard defines "int" as the current machine's natural size, and "byte" as its smallest accessible size. From there, it is the developper's (and the compiler's) responsabilty to adapt. C and C++ are machine-oriented first, abstract second.[Ответ]
aerin 21:52 11.06.2013
Никакая это ни холивар. Тут не может быть двух точек зрения. Читаем стандарт и ничего от себя не придумываем.
Сообщение от Spectator:
Далее. Сформулируем предмет спора, мы выясняем каков должен быть размер int при платформе 64 бита. С указателем всё понятно, сегментов у нас нет и не планируется, так что тут 64 бита без вариантов. Определяемся с интом.
Зачем нам походу дела что-то переформулировать? Все уже сформулировано выше:
Сообщение от Spectator:
Сообщение от MadFish:
Ну а я тебе о чем толкую?
ИТОГО: в С/С++
1 размер int не обязан быть равен разрядности процессора.
2 размер указателя int * не обязан быть равным размеру int
3 указатель(ссылка) не обязан быть адресом ячейки памяти
что и требовалось доказать.
1. обязан
2. обязан
3. как Вы их вообще разделяете???? в 32 битных процессорах, чтобы не усложнять вопрос. указатель - pointer, это переменная, которая хранит адрес ячейки памяти.
ССЫЛКА может быть чем то иным и зависеть от модели памяти. но указатель, pointer, и не просто pointer, а memory pointer чем вообще МОЖЕТ быть? какие есть варианты? в принципе?
По каждому пункту вы дали неверный ответ. Вам это объяснили с примерами, а вы опять лезете в бутылку.
Повторюсь, в x64 все очень наглядно:
sizeof(int) = 4
sizeof(int*) = 8
sizeof(int&) = 4
[Ответ]
aerin 22:03 11.06.2013
Сообщение от Spectator:
Вот то что я хочу сказать.
Что-то напомнило.
Сообщение от :
Встречаются два еврея:
— Слышал я «Битлз», не понравилось. Картавят, фальшивят... Что людям в них нравится?!
— А где ты их слышал?
— Да мне Мойша напел…
Зачем читать чьи-то высказывания на левых сайтах, если можно тупо открыть стандарт:
Сообщение от :
3.9.1 Fundamental types
3. [...]Plain ints have the natural size suggested by the architecture of the execution environment 44) ; the other signed integer types are provided to meet special needs.
и собственно сноска 44
Сообщение от :
44)
that is, large enough to contain any value in the range of INT_MIN and INT_MAX, as defined in the header <climits>.
Где здесь про привязку к разрядности процессора?
[Ответ]
Spectator 22:36 11.06.2013
Сообщение от aerin:
Зачем читать чьи-то высказывания на левых сайтах, если можно тупо открыть стандарт
Спасибо за цитату из стандарта.
plain ints have the natural size suggested by the architecture of the execution environment
На этом, думаю, можно спор и завершить. это ровно то о чём я талдычу уже вторую страницу.
[Ответ]
aerin 23:10 11.06.2013
Spectator, где в приведенной цитате про sizeof(int)==sizeof(int*)==разрядность проца?
[Ответ]
MadFish 23:34 11.06.2013
Сообщение от Spectator:
Про индексы и таблицы я уже говорил - это из другой оперы. Такие таблицы использовались НЕ КОМПИЛЯТОРОМ, а ПРОЦЕССОРОМ, до появления...
ну ты блин даёшь... Т.е. про виртуальные методы, таблицы вмт , указатели на функцию и RTTI ты не слышал? И про таблицы дескрипторов и адресацию в современной линейке х86 тоже? Ну и кто ты после этого?
Сообщение от Spectator:
С указателем всё понятно, сегментов у нас нет и не планируется, так что тут 64 бита без вариантов.
Ты смотри не вздумай такое среди умных людей сказануть, а то закидают ссаными тряпками. Я за тебя волнуюсь.
[Ответ]
Spectator 12:32 12.06.2013
Сообщение от MadFish:
ну ты блин даёшь...
Я по этому поводу несколько раз уже высказывался последнее время. Надоело повторяться. Вкратце - не "слышал", а вполне разбираюсь во всех этих механизмах.
RTTI и пр. это уже СОВСЕМ другое. Вы мешаете всё в одну кучу, видимо, как раз потому что "слышали".
[Ответ]
MadFish 12:52 12.06.2013
Сообщение от Spectator:
Надоело повторяться. Вкратце - не "слышал", а вполне разбираюсь во всех этих механизмах.
если бы ты разбирался то глупости бы не писал. Ты даже в своём любимом z80 то нифига не разбираешься и плаваешь как дерьмо в проруби. Тут тебя уже дважды нае... сначала я потом ДН2К4, а ты схавал и не поперхнулся, а дальше тролим тебя так, от скуки.( разрядность адресной шины у z80 16 бит и указатель на память всегда будет 16 бит. Даже в режиме индексной адресации, которая кстати используется исключительно для доступа к элементам массива, адрес будет ix+d= родные 16 бит. Дн2к4 же тебе даже ассемблерный листинг привёл где чёрным по белому написана адресация по регистровой паре -16 бит, а ты все 8 бит ссылка, 8 бит... смИшно...)Таблицы VMTи RTTI это таблицы данных где КОМПИЛЯТОР хранит информацию для режима рунтайм. В частности по вмт вычисляется адрес нужного виртуального метода, а УКАЗАТЕЛЬ внутри программы есть не что иное, как индекс элемента в этой таблице(те указатель у нас не является адресом ячейки памяти). Так что, мальченка, шел бы ты... документацию читать. Тут уже давно всем понятно что ты не программер, а так...мир дверь мяч.
[Ответ]
Spectator 13:25 12.06.2013
MadFish, уныло. компилятор, который что-то хранит в режиме "рун-тайм" - это выше моего понимания.
так что я с Вами спорить закругляюсь, а Вы впредь воздержитесь от подобных излияний, особенно в адрес других форумцев, кроме меня. за это сразу будет бан.
[Ответ]
dn2k4 13:44 12.06.2013
Сообщение от Spectator:
8 бит, конечно. байт. байт сегмента + байт указателя в сегменте давали 64К памяти без страниц (которые использовались в 128К и выше режимах). Те самые 48К ОЗУ + 16 ПЗУ. Z80 как бы 8 битный компьютер. вариантов немного.
Эх, спектатор, спектатор...
Теперь следим за руками. Пример-то с небольшим подвохом был.
1) В фрагменте, в который компилируется "p = malloc(sizeof(int));", очень хорошо видно:
что кагбе говорит, что размер int - два байта, 16 бит.
2) Там не зря написано "far int *p" (это, кста, твои знания по С характеризует). По выделению памяти на стеке (а в комментариях к lp_pint прямо написано) узнаем, что для дальней адресации используется три байта - половинка E от DE и HL. Итого - 24 бита. lp_pint по данным менеджера памяти программно переключает страницу.
То же самое видно в процессе копирования "q = p", при анализе l_getptr и l_putptr. 24 бита.
3) Шина адреса у процессора Z80 16 бит. Ссылку на доки лениво давать, уж прости. Придется тебе поверить, что например "LD A, (HL)" так и работает.
4) Но процессор Z80 считается 8 битным, тут ты прав.
5) Кроме спектрума, к которому ты неявно аппелируешь своими 16к + 48к существуют и другие системы на Z80, с совершенно другими моделями памяти
Все это очень хорошо показывает, что связи между размером int, расходами памяти на хранение указателя, шиной и разрядностью процессора нет.
А ты, прости, обосрался, знаток С, профессионал дизассемблированного кода и ментор компьютерных наук. Причем обосрался на поле, которое сам же и выбрал. Может в будущем стоит подавлять желание быть в каждой бочке затычкой?
[Ответ]
MadFish 13:56 12.06.2013
Сообщение от Spectator:
MadFish, уныло. компилятор, который что-то хранит в режиме "рун-тайм" - это выше моего понимания.
так что я с Вами спорить закругляюсь, а Вы впредь воздержитесь от подобных излияний, особенно в адрес других форумцев, кроме меня. за это сразу будет бан.
полность согласен с тобой в данном конкретном случае. И обещаю в отношении других пользователей использовать совсем другую лексику и подход. А ты будь добр, убери из первоначальной темы всю ерунда которую понаписал, или поставь ИМХО , чтобы не вводить этих других пользователей в заблуждение своими познаниями.
[Ответ]
Spectator 18:29 12.06.2013
Сообщение от dn2k4:
Все это очень хорошо показывает, что связи между размером int, расходами памяти на хранение указателя, шиной и разрядностью процессора нет.
Всё это явно показывает только одно - что ты пытаешься замешать кашу погуще чтобы эту доказать отсутствие этой связи.
Ответь на простой вопрос - исходя ИЗ ЧЕГО выбирается размер int в компиляторе? Выбор у нас довольно простой - от одного бита до бесконечности.
[Ответ]
dn2k4 19:16 12.06.2013
Сообщение от Spectator:
Всё это явно показывает только одно - что ты пытаешься замешать кашу погуще чтобы эту доказать отсутствие этой связи.
Совершенно верно. Чтобы доказать отсутствие этой связи.
Сообщение от Spectator:
Ответь на простой вопрос - исходя ИЗ ЧЕГО выбирается размер int в компиляторе? Выбор у нас довольно простой - от одного бита до бесконечности.
Понятия не имею. Сейчас камень на твоей половине огорода - ты и рассказывай. Со ссылками на стандарты, примерами на нескольких платформах и т.д.
[Ответ]
Spectator 19:27 12.06.2013
Сообщение от dn2k4:
Понятия не имею. Сейчас камень на твоей половине огорода - ты и рассказывай. Со ссылками на стандарты, примерами на нескольких платформах и т.д.
Хорошо. Еще раз, 100500 наверное уже, но причина за последние месяцы не поменялась, как бы я её не афишировал. Без ссылок на стандарты, безусловно, поскольку причины стандартов в стандартах не указываются. Так не я придумал.
Размер int, как самого стандартного и православного типа в языке С/С++, выбирается исходя из разрядности процессора(ов), под который(ые) создается компилятор. Разрядности СТАНДАРТНЫХ регистров, регистров общего назначения. А не специализированны, для доступа к памяти там или математических.
Поскольку именно с этими размерами будет работать процессор, выполняя скомпилированную программу.
[Ответ]
MadFish 19:46 12.06.2013
Сообщение от Spectator:
Ответь на простой вопрос - исходя ИЗ ЧЕГО выбирается размер int в компиляторе?
сколько раз тебе надо повторить одно и тоже чтобы до тебя дошло? Размер int при проектировании компилятора выбирается исходя из необходимости строго следования вот этому http://www.open-std.org/jtc1/sc22/wg...2011/n3242.pdf и углу в радианах на сколь от вертикали отклоняется член главного архитектора компилятора в возбуждённом состоянии. Если тебе нужны точные цифры тебе придётся найти и возбудить разработчика конкретного компилятора. Достал блин.
PS я так и не увидел чтобы ересь из первоначальной темы была убрана.
[Ответ]
manifest 20:04 12.06.2013
Сообщение от Spectator:
Без ссылок на стандарты, безусловно, поскольку причины стандартов в стандартах не указываются. Так не я придумал.
Совсем уже ахинея какая-то пошла. Вам уже и выдержки из стандарта привели, и статьи из википедии, и практические примеры. Вы же в ответ только что-то каждый раз выдумываете. Без ссылок на авторитетные источники Ваши слова лишь шум. В то же время, на что-либо сослаться у Вас не получится, потому что стандарт - это уже эталон на который ориентируются все остальные источники по-определению. Хотите жить в параллельной вселенной - пожалуйста, но не нужно пудрить голову окружающим.
[Ответ]
Сообщение от :
There are five standard signed integer types : “signed char”, “short int”, “int”, “long int”, and “long long int”. In this list, each type provides at least as much storage as those preceding it in the list.
В C99, который текущий, для int пределы -2147483647..-2147483647 включительно. В C89 (который ANSI C в просторечии) было -32767..32767. Можно подсмотреть, по-моему, где-то в соответствующих limits.h или stdint.h
Поэтому, например, если взять С99 компилятор для восьмибитного Z80 с шестнадцатиразрядной шиной, то он честно будет хранить int в 4 байтах.
Я так подозреваю, что спектатор наш, в силу глубоких познаний языка C, имеет в виду "exact-width integer types", которые int8_t, int16_t... Но и там определение через степени двойки дается, а не через мифическую разрядность процессора.
Спектатор, а давай, лулзов ради, еще float в свете разрядности процессора обсудим? А что, тоже "стандартный и православный тип в языке С/С++" =)
[Ответ]
Spectator 00:06 13.06.2013
Сообщение от MadFish:
сколько раз тебе надо повторить одно и тоже чтобы до тебя дошло?
завязывай, моё терпение не безгранично. оно лопнет и за оскорбление последует бан.
по поводу стандарта. это всё гениально, конечно, что вы (с маленькой буквы, я обращаюсь к группе людей участвующей в дискуссии) выбрали в качестве отправной точки стандарт языка. а ничего что он возникает не сам по себе?
я уже конкретно в этой теме говорил что сейчас УЖЕ чешутся о создании нового стандарта, более удовлетворяющего современным нуждам?
подумайте что вы пытаетесь мне доказать? что лет через 100, если предположить что язык С++ сохранится в более менее неизменном виде, что в целом вполне даже реально, тип int будет по прежнему храниться в 4 байтах? а в язык последовательно введут штук десять разных типов, отражающих изменения процессоров? если предположить что развитие их будет продолжаться в том же направлении. будет или нет - это уже совсем другой разговор.
это же бред... в обозримом будущем int по умолчанию будет хранить 8 байт. стандарт выпустят новый, отражающий изменения, продиктованные временем. его даже название отражает то что это subject to change, так как идет привязка к году, году актуальности.
давайте еще раз и сначала - исходя из каких соображений выбирается размер стандартного (ключевого, самого правильного) типа языка при создании компилятора. с учетом того что будет разработан соответствующий стандарт? как вы о нем рассуждаете и цифры 99 глаза не режут, я ума не дам.
зачем делать новый компилятор для старого процессора - это в моей голове тоже никак не укладывается (я про компилятор С удовлетворяющий стандарту 1999 года для процессора Z80 выпущенного в 1976).
рассуждения о том что размер инта ограничен неким логичным пределом верны, безусловно, но и разрядность процессора/шины будет ограничена тем же логичным пределом.... так что финальное изменение затронет и компилятор и процессор.
[Ответ]
aerin 00:18 13.06.2013
Spectator, хороший сферический конь, породистый.
Только дело в том, что программирование - вещь практическая, а не теоретическая. И вот реальность с вашими идеями не совпадает.
ЗЫ. Кстати последний раз я вам цитировал из драфта C++11, а не 99. Но и в нем, вот какие редиски, не захотели привязать int к разрядности проца [Ответ]
Spectator 00:25 13.06.2013
Сообщение от dn2k4:
Спектатор, а давай, лулзов ради, еще float в свете разрядности процессора обсудим? А что, тоже "стандартный и православный тип в языке С/С++" =)
float = short. обсуждать смысла нет.
а вот double в свете размерности регистров мат. сопроцессора обсудить можно. хотя и глупо, вполне очевидно что они будут ТОЖЕ совпадать. и то что задел и в этом случае как минимум до 256 бит есть тоже вполне очевидно. название double конечно выбрано опрометчиво.
как ты хотел пошутить то? что размер типа с плавающей точкой не зависит от "железа". это в твоем понимании смешно - всерьез такое говорить?)))
[Ответ]
Spectator 00:32 13.06.2013
Сообщение от aerin: Spectator, хороший сферический конь, породистый.
Только дело в том, что программирование - вещь практическая, а не теоретическая. И вот реальность с вашими идеями не совпадает.
ЗЫ. Кстати последний раз я вам цитировал из драфта C++11, а не 99. Но и в нем, вот какие редиски, не захотели привязать int к разрядности проца
я не понимаю - что значит "не привязали", если он по определению привязан?
это настолько очевидно что не упоминается. как в стандарте не написано что он создан для языка, на котором пишут программы, для компьютеров, которые делают с использованием микросхем....
и то что программирование - вещь практическая, это именно то О ЧЁМ Я толкую уже сколько времени, и никак не дотолкую. ДА-ДА-ДА, именно. Именно практическая. Поэтому стандартный тип языка имеет размер подходящий для современных процессоров. Ну по моему банальная мысль до безобразия. Как можно с этим спорить?
[Ответ]
aerin 00:37 13.06.2013
Сообщение от :
float = short.обсуждать смысла нет.
схyяли? хотя что это я
ВОЙНА = ЭТО МИР; СВОБОДА = ЭТО РАБСТВО; НЕЗНАНИЕ = СИЛА
[Ответ]
aerin 00:44 13.06.2013
Ой, я сразу не заметил
Сообщение от Spectator:
а вот double в свете размерности регистров мат. сопроцессора обсудить можно.
Ну, давайте уже скорее пообсуждаем размерность double в свете 80-битовой внутренней размерности стека сопроцессора. Или вы таки про служебные регистры, так они тоже имеют веселые размерности, никоим образом не пересекающиеся с double-ом.
ЗЫ. Или мы не про intel?
[Ответ]
dn2k4 01:17 13.06.2013
Сообщение от Spectator:
float = short. обсуждать смысла нет.
Отличный ход, бро!
int привязан к разрядности процессора, short (как подмножество int) зависит от него, а float = short. Это несомненно приведет к увеличению точности вычислений в следующих поколениях процессоров, обладающих увеличенной разрядностью, и неизбежной победе мирового порядка. Ура, товарищи!
Вот только ты привязкой int к разрядности сейчас практически запретил обмен целыми числами между разными архитектурами машин. Незадача, но я в тебя верю - ты ведь придумаешь что нибудь, правда?
[Ответ]