Здравствуйте, koenjihyakkei, Вы писали:
K>Здравствуйте, Sm0ke, Вы писали:
K>Его не придумывали он сам пришел. Попробуйте придумать архитектуру процессора с бесплатным и атомарным доступом к невыровненной памяти.
помнится, программировал под какой-то мерзкий проц, mips чтоли, так там попытка привести поток байтов в int, типа int x = *(int*)(bytes+n) просто крашило программу на невыровненной памяти. Пришлось двигать байты
Здравствуйте, wl., Вы писали:
K>>Его не придумывали он сам пришел. Попробуйте придумать архитектуру процессора с бесплатным и атомарным доступом к невыровненной памяти.
wl.>помнится, программировал под какой-то мерзкий проц, mips чтоли, так там попытка привести поток байтов в int, типа int x = *(int*)(bytes+n) просто крашило программу на невыровненной памяти. Пришлось двигать байты
Я хз как сишечка, думаю, аналогично, но вообще C++ такое запрещает. Это UB. Надо нужную область копировать в заранее объявленный int, и вот уже после этого с ним можно работать
Здравствуйте, Sm0ke, Вы писали:
S>Этож издевательство над программистом =\
Да Си — это вообще сплошное издевательство над программистом. А C++ добавляет к этому жестокое, негуманное обращение с животными и преступления против человечности.
Здравствуйте, Pzz, Вы писали:
Pzz>Да Си — это вообще сплошное издевательство над программистом. А C++ добавляет к этому жестокое, негуманное обращение с животными и преступления против человечности.
Мне всегда казалось, что с помощью C++ вы себе случайно отстрелили палец, отсюда и любовь к этому языку. Но, такое ощущение, что отстрелили вовсе и не палец.
Здравствуйте, LaptevVV, Вы писали:
LVV>В начале были байты. LVV>И байты были в IBM.
Верно, но не в начале.
LVV>В советских машинах никаких байтов не было.
В начале было слово. Как бы ни банально это не звучало. Причем и в советских машинах, и не в советских.
В качестве исторического примера. У Вирта в первой версии Паскаля для описания строковых переменных есть необязательный модификатор "pack", догадайся для чего. В качестве подсказки первый компилятор Паскаля писали на то ли Барроузе, то ли CDC, на чем-то с не побайтовой, а пословной адресацией.
Это "pack" в книжках по Паскалю упоминали не объясняя, что значит и возможно сами не понимая, чуть ли не до 90-х, когда общепринятым стал борландовский вариант Паскаля.
Cray вроде как был с пословной адресацией, да и все или большинство суперкомпьютеров пока у них была собственная архитектура, а не основанная на параллельной работе огромного множества микропроцессоров с обычными архитектурами.
И сейчас есть 32-разрядные микроконтроллеры с пословной адресацией, 16-разрядные наверно тоже есть.
LVV>>В начале были байты. LVV>>И байты были в IBM. _>Верно, но не в начале.
Я имел ввиду, что до появлинея алигна появились байты. Что алигн не просто так с бодуна возник... LVV>>В советских машинах никаких байтов не было. _>В начале было слово. Как бы ни банально это не звучало. Причем и в советских машинах, и не в советских.
да, конечно.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Я имел ввиду, что до появлинея алигна появились байты. Что алигн не просто так с бодуна возник...
Угу, вместе с появлением побайтной адресации и возникла проблема выравнивания.
Здравствуйте, koenjihyakkei, Вы писали:
K>Попробуйте придумать архитектуру процессора с бесплатным и атомарным доступом к невыровненной памяти.
Я мало понимаю в архитектурах процессоров. Можете объяснить на пальцах в чём проблема быстрого побайтового доступа и почему атомарность важнее выравнивания? (Или атоматность не является альтернативой выравнивания?)
Здравствуйте, Sm0ke, Вы писали:
S>Этож издевательство над программистом =\
В теории, между теорией и практикой разницы нет. На практике, она есть.
Так и с компьютерами. В теории, мы работаем с некоторым идеальным вычислителем. На практике, вылезают те или иные компромиссы реализации, которые могут дать по голове, наступить на ногу или просто громко на Вас чихнуть при всём честном народе.
Почему ячейкам памяти требуется выравнивание?
Почему кэш не работает с индивидуальными байтами?
Почему на CR-ROM можно записать файл, который оттуда не удастся прочитать никогда и никем?
И т.д. и т.п.
LVV>>В советских машинах никаких байтов не было. ЕМ>Там был отдельный геморрой со сборкой/разборкой слов.
Да. Возможно, и поэтому тоже размер слова в БЭСМ-6 был 48 бит.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, B0FEE664, Вы писали:
BFE>в чём проблема быстрого побайтового доступа
Доступ к памяти выполняется циклами — подготовка операции, собственно операция, завершение операции. Один цикл может быть выполнен только в пределах разрядности магистрали (машинного слова — нынче это 64 бита, 8 байтов). Прочитать/записать один или несколько байтов за один цикл можно только в пределах одного слова. Для операций с байтами, находящимися в разных словах, нужно выполнять разные циклы.
BFE>и почему атомарность важнее выравнивания?
Без атомарности невозможна многопроцессорная работа, а выравнивание создает проблемы лишь тем программистам, которые неудачно выбрали язык. В языках, не требующих связи с низким уровнем, программисту вообще не видны эти особенности.
Здравствуйте, LaptevVV, Вы писали:
LVV>Да. Возможно, и поэтому тоже размер слова в БЭСМ-6 был 48 бит.
Размер слова в БЭСМ-6 был 48 бит был потому как числа с плавающей запятой в 48 бит вполне достаточно для большинства расчетных звдач.
LVV>>Да. Возможно, и поэтому тоже размер слова в БЭСМ-6 был 48 бит. _>Размер слова в БЭСМ-6 был 48 бит был потому как числа с плавающей запятой в 48 бит вполне достаточно для большинства расчетных звдач.
И поэтому ТОЖЕ...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>И поэтому ТОЖЕ...
А второе это удачно впихнуть в слово команду ЦП с задуманными методами адресации и предполагаемыми объемами памяти. Там же наверно команда была размером в слово?