Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Срочная помощь программистов и тема для флуда по тематике раздела |
Философия, технологии, алгоритмы! |
|
Опции темы |
11.06.2013, 19:12 | #721 |
Форумец
Сообщений: 40,897
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Да не закидывайте меня этим. Я в курсе. Я следил за развитием событий еще когда разрабатывался компилятор первый под 64 битные процессоры. Там были дикие и жуткие споры - как быть, как правильно и как надо. В итоге победила дружба, позволившая компилировать и запускать программы без полной переделки. И это единственная причина, почему вот так сделали. Затычка, не более того.
|
11.06.2013, 19:17 | #723 | |
Форумец
Сообщений: 231
Регистрация: 26.02.2007
Не в сети |
Цитата:
"Размер int не обязан быть равен разрядности процессора и размер указателя int * не обязан быть равным размеру int." © MadFish |
|
11.06.2013, 19:22 | #724 |
бибизьян
Сообщений: 3,031
Регистрация: 17.02.2004
Не в сети |
Вот еще хорошая табличка в тему
http://en.wikipedia.org/wiki/64-bit_...it_data_models даже вот тут более наглядно http://www.ibm.com/developerworks/ru...port64/#N1006F |
11.06.2013, 19:34 | #725 | |
Форумец
Сообщений: 340
Регистрация: 25.07.2002
Не в сети |
Цитата:
3 указатель может быть индексом некой таблицы в которой компилятор держит информацию о местоположении данных в рантайм режиме, хотя кому я это об'ясняю... |
|
11.06.2013, 21:34 | #726 | ||
Форумец
Сообщений: 40,897
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
я сразу говорю - давайте не будем излишне переходить на личности. это Holy War и надо это понимать. Истины не будет. Далее. Сформулируем предмет спора, мы выясняем каков должен быть размер int при платформе 64 бита. С указателем всё понятно, сегментов у нас нет и не планируется, так что тут 64 бита без вариантов. Определяемся с интом. Цитата:
Как в случае Z80, к примеру и 128 К памяти. Компилятор в рантайме хранить ничего не может, извините. Он там немножко не задействован. Не стоит путать виртуальную машину и компилятор. |
||
11.06.2013, 21:52 | #727 |
Форумец
Сообщений: 40,897
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
http://forums.codeguru.com/showthrea...-integer-types
Вот то что я хочу сказать. 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. |
11.06.2013, 21:52 | #728 | |||
бибизьян
Сообщений: 3,031
Регистрация: 17.02.2004
Не в сети |
Никакая это ни холивар. Тут не может быть двух точек зрения. Читаем стандарт и ничего от себя не придумываем.
Цитата:
Цитата:
Повторюсь, в x64 все очень наглядно: sizeof(int) = 4 sizeof(int*) = 8 sizeof(int&) = 4 |
|||
11.06.2013, 22:03 | #729 | ||||
бибизьян
Сообщений: 3,031
Регистрация: 17.02.2004
Не в сети |
Цитата:
Цитата:
Цитата:
Цитата:
|
||||
11.06.2013, 22:36 | #730 | |
Форумец
Сообщений: 40,897
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
plain ints have the natural size suggested by the architecture of the execution environment На этом, думаю, можно спор и завершить. это ровно то о чём я талдычу уже вторую страницу. |
|
11.06.2013, 23:34 | #732 | |
Форумец
Сообщений: 340
Регистрация: 25.07.2002
Не в сети |
Цитата:
Последний раз редактировалось MadFish; 12.06.2013 в 08:54. |
|
12.06.2013, 12:32 | #733 |
Форумец
Сообщений: 40,897
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Я по этому поводу несколько раз уже высказывался последнее время. Надоело повторяться. Вкратце - не "слышал", а вполне разбираюсь во всех этих механизмах.
RTTI и пр. это уже СОВСЕМ другое. Вы мешаете всё в одну кучу, видимо, как раз потому что "слышали". |
12.06.2013, 12:52 | #734 |
Форумец
Сообщений: 340
Регистрация: 25.07.2002
Не в сети |
если бы ты разбирался то глупости бы не писал. Ты даже в своём любимом z80 то нифига не разбираешься и плаваешь как дерьмо в проруби. Тут тебя уже дважды нае... сначала я потом ДН2К4, а ты схавал и не поперхнулся, а дальше тролим тебя так, от скуки.( разрядность адресной шины у z80 16 бит и указатель на память всегда будет 16 бит. Даже в режиме индексной адресации, которая кстати используется исключительно для доступа к элементам массива, адрес будет ix+d= родные 16 бит. Дн2к4 же тебе даже ассемблерный листинг привёл где чёрным по белому написана адресация по регистровой паре -16 бит, а ты все 8 бит ссылка, 8 бит... смИшно...)Таблицы VMTи RTTI это таблицы данных где КОМПИЛЯТОР хранит информацию для режима рунтайм. В частности по вмт вычисляется адрес нужного виртуального метода, а УКАЗАТЕЛЬ внутри программы есть не что иное, как индекс элемента в этой таблице(те указатель у нас не является адресом ячейки памяти). Так что, мальченка, шел бы ты... документацию читать. Тут уже давно всем понятно что ты не программер, а так...мир дверь мяч.
Последний раз редактировалось MadFish; 12.06.2013 в 13:34. |
12.06.2013, 13:25 | #735 |
Форумец
Сообщений: 40,897
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
MadFish, уныло. компилятор, который что-то хранит в режиме "рун-тайм" - это выше моего понимания.
так что я с Вами спорить закругляюсь, а Вы впредь воздержитесь от подобных излияний, особенно в адрес других форумцев, кроме меня. за это сразу будет бан. |
12.06.2013, 13:44 | #736 | |
Пессимист
Сообщений: 618
Регистрация: 22.07.2004
Не в сети |
Цитата:
Теперь следим за руками. Пример-то с небольшим подвохом был. 1) В фрагменте, в который компилируется "p = malloc(sizeof(int));", очень хорошо видно: Код:
ld hl,2 ;const call l_int2long_s push de push hl call malloc_far 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, расходами памяти на хранение указателя, шиной и разрядностью процессора нет. А ты, прости, обосрался, знаток С, профессионал дизассемблированного кода и ментор компьютерных наук. Причем обосрался на поле, которое сам же и выбрал. Может в будущем стоит подавлять желание быть в каждой бочке затычкой? |
|
12.06.2013, 13:56 | #737 |
Форумец
Сообщений: 340
Регистрация: 25.07.2002
Не в сети |
полность согласен с тобой в данном конкретном случае. И обещаю в отношении других пользователей использовать совсем другую лексику и подход. А ты будь добр, убери из первоначальной темы всю ерунда которую понаписал, или поставь ИМХО , чтобы не вводить этих других пользователей в заблуждение своими познаниями.
|
12.06.2013, 18:29 | #738 | |
Форумец
Сообщений: 40,897
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
Ответь на простой вопрос - исходя ИЗ ЧЕГО выбирается размер int в компиляторе? Выбор у нас довольно простой - от одного бита до бесконечности. |
|
12.06.2013, 19:16 | #739 | |
Пессимист
Сообщений: 618
Регистрация: 22.07.2004
Не в сети |
Цитата:
Понятия не имею. Сейчас камень на твоей половине огорода - ты и рассказывай. Со ссылками на стандарты, примерами на нескольких платформах и т.д. |
|
12.06.2013, 19:27 | #740 | |
Форумец
Сообщений: 40,897
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
Размер int, как самого стандартного и православного типа в языке С/С++, выбирается исходя из разрядности процессора(ов), под который(ые) создается компилятор. Разрядности СТАНДАРТНЫХ регистров, регистров общего назначения. А не специализированны, для доступа к памяти там или математических. Поскольку именно с этими размерами будет работать процессор, выполняя скомпилированную программу. |
|
12.06.2013, 19:46 | #741 | |
Форумец
Сообщений: 340
Регистрация: 25.07.2002
Не в сети |
Цитата:
PS я так и не увидел чтобы ересь из первоначальной темы была убрана. |
|
12.06.2013, 20:04 | #742 |
Форумец
Сообщений: 231
Регистрация: 26.02.2007
Не в сети |
Совсем уже ахинея какая-то пошла. Вам уже и выдержки из стандарта привели, и статьи из википедии, и практические примеры. Вы же в ответ только что-то каждый раз выдумываете. Без ссылок на авторитетные источники Ваши слова лишь шум. В то же время, на что-либо сослаться у Вас не получится, потому что стандарт - это уже эталон на который ориентируются все остальные источники по-определению. Хотите жить в параллельной вселенной - пожалуйста, но не нужно пудрить голову окружающим.
|
12.06.2013, 20:51 | #743 | ||
Пессимист
Сообщений: 618
Регистрация: 22.07.2004
Не в сети |
Цитата:
Цитата:
Поэтому, например, если взять С99 компилятор для восьмибитного Z80 с шестнадцатиразрядной шиной, то он честно будет хранить int в 4 байтах. Я так подозреваю, что спектатор наш, в силу глубоких познаний языка C, имеет в виду "exact-width integer types", которые int8_t, int16_t... Но и там определение через степени двойки дается, а не через мифическую разрядность процессора. Спектатор, а давай, лулзов ради, еще float в свете разрядности процессора обсудим? А что, тоже "стандартный и православный тип в языке С/С++" =) |
||
13.06.2013, 00:06 | #744 |
Форумец
Сообщений: 40,897
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
завязывай, моё терпение не безгранично. оно лопнет и за оскорбление последует бан.
по поводу стандарта. это всё гениально, конечно, что вы (с маленькой буквы, я обращаюсь к группе людей участвующей в дискуссии) выбрали в качестве отправной точки стандарт языка. а ничего что он возникает не сам по себе? я уже конкретно в этой теме говорил что сейчас УЖЕ чешутся о создании нового стандарта, более удовлетворяющего современным нуждам? подумайте что вы пытаетесь мне доказать? что лет через 100, если предположить что язык С++ сохранится в более менее неизменном виде, что в целом вполне даже реально, тип int будет по прежнему храниться в 4 байтах? а в язык последовательно введут штук десять разных типов, отражающих изменения процессоров? если предположить что развитие их будет продолжаться в том же направлении. будет или нет - это уже совсем другой разговор. это же бред... в обозримом будущем int по умолчанию будет хранить 8 байт. стандарт выпустят новый, отражающий изменения, продиктованные временем. его даже название отражает то что это subject to change, так как идет привязка к году, году актуальности. давайте еще раз и сначала - исходя из каких соображений выбирается размер стандартного (ключевого, самого правильного) типа языка при создании компилятора. с учетом того что будет разработан соответствующий стандарт? как вы о нем рассуждаете и цифры 99 глаза не режут, я ума не дам. зачем делать новый компилятор для старого процессора - это в моей голове тоже никак не укладывается (я про компилятор С удовлетворяющий стандарту 1999 года для процессора Z80 выпущенного в 1976). рассуждения о том что размер инта ограничен неким логичным пределом верны, безусловно, но и разрядность процессора/шины будет ограничена тем же логичным пределом.... так что финальное изменение затронет и компилятор и процессор. |
13.06.2013, 00:18 | #745 |
бибизьян
Сообщений: 3,031
Регистрация: 17.02.2004
Не в сети |
Spectator, хороший сферический конь, породистый.
Только дело в том, что программирование - вещь практическая, а не теоретическая. И вот реальность с вашими идеями не совпадает. ЗЫ. Кстати последний раз я вам цитировал из драфта C++11, а не 99. Но и в нем, вот какие редиски, не захотели привязать int к разрядности проца |
13.06.2013, 00:25 | #746 | |
Форумец
Сообщений: 40,897
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
а вот double в свете размерности регистров мат. сопроцессора обсудить можно. хотя и глупо, вполне очевидно что они будут ТОЖЕ совпадать. и то что задел и в этом случае как минимум до 256 бит есть тоже вполне очевидно. название double конечно выбрано опрометчиво. как ты хотел пошутить то? что размер типа с плавающей точкой не зависит от "железа". это в твоем понимании смешно - всерьез такое говорить?))) |
|
13.06.2013, 00:32 | #747 | |
Форумец
Сообщений: 40,897
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
это настолько очевидно что не упоминается. как в стандарте не написано что он создан для языка, на котором пишут программы, для компьютеров, которые делают с использованием микросхем.... и то что программирование - вещь практическая, это именно то О ЧЁМ Я толкую уже сколько времени, и никак не дотолкую. ДА-ДА-ДА, именно. Именно практическая. Поэтому стандартный тип языка имеет размер подходящий для современных процессоров. Ну по моему банальная мысль до безобразия. Как можно с этим спорить? |
|
13.06.2013, 00:44 | #749 | |
бибизьян
Сообщений: 3,031
Регистрация: 17.02.2004
Не в сети |
Ой, я сразу не заметил
Цитата:
ЗЫ. Или мы не про intel? |
|
13.06.2013, 01:17 | #750 |
Пессимист
Сообщений: 618
Регистрация: 22.07.2004
Не в сети |
Отличный ход, бро!
int привязан к разрядности процессора, short (как подмножество int) зависит от него, а float = short. Это несомненно приведет к увеличению точности вычислений в следующих поколениях процессоров, обладающих увеличенной разрядностью, и неизбежной победе мирового порядка. Ура, товарищи! Вот только ты привязкой int к разрядности сейчас практически запретил обмен целыми числами между разными архитектурами машин. Незадача, но я в тебя верю - ты ведь придумаешь что нибудь, правда? |