Да, некоторые платформы не могут использовать не-кратные адреса. Но как и у автора статьи у вас идёт подмена типов - а это и есть источник ошибки. При нормальном написании программы - char данные читаем через char*, а int данные через int* - даже на Spark не будет проблем. Но если вы принудительно путаете типы данных - ну увы...
Потому что alignment на большинстве платформ не является обязательным. На x86_64 он желателен с точки зрения работы с кешами, но вовсе не обязателен.
А то что UBSAN вам сообщает - это не undefined behavior а слегка усложненная оптимизация работы с памятью. К стандарту языка это вообще никак не относится.
If the resulting pointer is not correctly aligned for the referenced type, the behavior is undefined
Это не имеет ничего общего с кратностью адреса. Более правильным переводом для aligned for reference type - будет: "сочетается с используемым типом".
В вашем первом примере у вас
int *p = (int *)(argv[0] + argc);
это полнейшая чушь с точки зрения типизации. - берем адрес указывающий на первый символ строки (которая содержит имя исполняемого файла), прибавляем к нему единицу и пытаемся прочитать как число. То есть у вас указатель на int читает из указателя на char. Вот это и есть UB в вашем коде, то самое о чём предупреждает текст стандарта. Естественно у вас происходит что-то непонятное и непредсказуемое... Всю остальную статью даже по диагонали читать нет смысла.
Если вам хочется, то можно легко увидеть работу с адресами не кратными четырем на таком примере:
struct __attribute__((packed)) mystruct {
int i1;
char c;
int i2;
};
int main(int argc, char **argv) {
struct mystruct a = {1, 'A', 2};
printf("&a.i1=%p a.i1=%d\n", &a.i1, a.i1);
printf("&a.c=%p a.c=%c\n", &a.c, a.c);
printf("&a.i2=%p a.i2=%d\n", &a.i2, a.i2);
return 0;
}
Вы удивитесь, но адрес `a.i2` в этом примере не кратен четырём, но всё работает.
Забавно... С одной стороны эта история и моя, но с другой - я с этим всем практически не пересекался. Как-то так получилось что всё упомянутое входит в "я там был, но где-то сбоку".
О Patisonic я слышал, но, кажется, даже ни разу не видел его вживую. Слишком он был дорогой для моей семьи. В 89-ом, мне тогда еще школьнику, попытались купить "бытовой компьютер" в магазине, но он не завелся, сдали обратно. Но потом купили "Кедр" у кооператива Агат - и он заработал! Черный-черный корпус, полный программный аналог Спектрума с 48Кб памяти. Почти два года у меня были посвящены ассемблеру. Потом плотно пересел на PC и мой личный "Кедр" ушел на вечное хранение в шкаф, не знаю что стало с ним потом, во время переездов. Стоил Кедр при покупке целых 700 рублей - сумасшедшие деньги, но мама расщедрилась.
В 91-ом, стал студентом Педагогического и часто ошивался в классе с MSX на третьем этаже (факультет физики). О человеке с фамилией "Казаринов" - слышал, но личного знакомства не было. Даже не смотря на то что потом я почти шесть лет провел в стенах педагогического, но уже на втором этаже в "лаборатории". И часто бегал по компьютерным классам института - чинил поломанные студентами машины.
Потом были в моей истории и работы в магазине техники и на телевизионщиков пришлось с годик потрудится. Но пересечений с людьми упомянутыми в этой статье не было. Но может и были, но без прямого общения и личных знакомств. Всё же Омск не маленький город...
Из моего опыта "подсказка слов не соотвествующих уровню" - не нужная фича. Больше мешает чем помогает. Просто потому что мой реальный словарь и словарь предполагаемый для уровня не совпадают. Я вижу кучу ненужных подсказок и при этим кучу слов смотрю в словаре.
Так что в итоге, я нафиг отключил эту фичу и читаю чистый текст. А когда действительно надо - тогда и подсматриваю конкретное слово в словаре.
Рекомендую посмотреть, поиграться, и использовать официальный Kindle - и самостоятельное устройство, и программный вариант для андроидных таблеток-телефонов. Они имеют встроеный, всплывающий словарь, переводчик, википедию. Просто нажимаешь на неизвестное слово, держишь палец секунду - слово выделяется и появляется окошко с английским толковым словарем - самое полезное на мой взгляд. Можно покрутить и получить окошко с bing-translator - хреновенький, знает только основной словарь, а редкие слова увы. И есть окошко с википедией - полезно, если автор ссылается на что-то культурологическое, типа имени, то что не является словарным словом.
Так же рекомендуб Fb2Reader - андроидная читалка, и есть варианты для PC. В андроидной - жмешь на слово, в меню выбираешь "глобус" и получаешь гугл-поиск по выбранному слову (или предложению). Потом просто тыкаешь андроидную кнопку "назад", или просто переключаешься обратно в читалку - она не теряет страницу чтения.
И кстати, у вас там на скриншоте ошибка орфографическая - нет такого слова "readed". Прочитано = read. Слово исключение - одинаково пишется и в настоящем и в прошедшем времени, но по разному звучит.
На PaperWhite это точно есть, просто нажать на слово и подержать. Вариант Киндла для Андроида работает точно так-же, кстати.
Переводчик там не амазоновский, а микрософтовский - bing называется. Увы, не перенастраивается и судя по сегодняшнему качеству пользоваться им увы нельзя.
Зато если не пытаться переводить, а читать толковый словарь (окошко словаря, слева от окошка переводчкика), то всё вполне замечательно понимается, без странностей с переводами и без "слово не найдено" для редких слов.
У меня есть сильное ощущение, что вы не сталкивались с выпускниками разных колледжей. Описанный персонаж явно учился в колледже среднего звена. В серьезных колледжах с именем и программа намного серьёзнее. Долг в 130К это явно не IV league (там и четверть миллиона не предел), но и не совсем community колледж - великоват долг для такого. Что-то типа городского, государственного? Либо этот студент учился на что-то другое, а не IT. Если IT у него и было, то как minor или вообще elective courses.
Ну а говоря о собственном опыте - вы описываете собственные проекты, а вовсе не обучение. Это ... не совсем честно, по отношению к студентам. Если во время обучения студент только учился тому чему его учили - он и останется "обученным". Так что даже если он и получил диплом какого-нибудь IV league универа, он всё равно может быть, по факту, студентом. Которому дали возможность изучить несколько технологий под руководством истинных корефеев, но... Редко кто получает во время обучения возможность стать research assistant у профессора или получить профильную работу вне колледжа. Такие студенты обычно идут на мастера или вообще на доктора. А бакалавры почти никогда, они если и работают во время учебы, то только в качестве барист или подобного.
В общем, у вас явно завышенное ожидание от юниоров. К тому-же, наложенное на иммиграцию, которая "задирает" образование. У человека обучавшегося IT за границей есть не совсем профильная, но чрезвычайно важная, для приема на работу проблема - он обучался за границей. Поэтому практически все приезжие IT-специалисты (если им не повезет, конечно) начинают как официальные джуны, даже если у них есть практическая и реальная квалификация на сеньора. А вот местные вчерашние студенты, даже после крутых колледжей, они обычно именно такие и есть.
Сколько бы не говорили работодатели о том, что ноутбук в офисе — это норма, не верьте. Потому что тот, кто работал за мощной станцией и двумя мониторами хочет себе станцию еще мощнее и третий экран. И ни за какие коврижки не пересядет за ноутбук,
Двух-экранные десктопы в нашей конторе это стандарт. Когда-то, мы старожилы, показали биг-боссам как это удобно и сейчас двух-головые станции сразу ставят всем новым сотрудникам.
Однако, один из моих коллег постоянно сидит с ноутбуком (10") при том, что у него тут-же на столе стоят два 22" дисплея. Он это объясняяет тем что этот ноутбук он постоянно таскает с собой и он привык к маленькому экранчику. И когда приходя в офис он ставит ноут на док (или включает свой офисный десктоп — у него есть обе возможности!), у него кружится голова от больших экранов. Привычка к маленькому не дает пользоваться большим.
Но лично я действительно не могу отказаться от двухэкранного десктопа и когда ломался один из мониторов у меня была натуральная ломка.
Я по русски пишу почти исключительно курсивом. Даже если сознательно пытаюсь начать писать раздельно — буквы скругляются и я скатываюсь в курсив.
А по английски наоборот — пишу всегда раздельно. Пробовал тренировать английский курсив, но не пошло совсем. В максимуме могу его читать.
Когда учил японский, даже слегка порадовался что нету курсивного письма. Но потом обнаружил «каллиграфию чувства»… высказал мирозданию несколько нецензурных слов. Это конечно не совсем курсив, но читать все равно сложно.
В целом, мне игра скорее нравится чем нет. Спокойная такая, слегка медитативная.
Адреналина ноль, думать ноль, пространства большие.
Иногда агрессивные зверушки появляются, чаще озабоченные sentinels мешаются.
Попадаются очень даже красивые планеты.
Если обращать внимание на монолиты древних, то вполне милая мифология вырисовывается.
В общем это скорее игра для тех кто любит куда-то брести. Без определенной цели на горизонте и не ожидая ничего особенного в итоге брожения. Просто брести…
Американский сенатор практически аналог российского депутата. С теми же правами и обязанностями.
В идеальном мире, сенатор выслушивает своих избирателей, выдвигает на основе услышанного законопроект и убеждает других сенаторов проголосовать за принятие этого закона…
Ну это в идеальном мире…
VR пока не пробовал, но в FPS меня может укачать если я начинаю играть голодным. После плотного обеда я могу бегать во всяких потомках Doom-a часа три-четыре, потом обязательно нужно что-нибудь пожевать. На голодный желудок играть не могу вообще, укачивает уже минут через пять после запуска игры.
И кстати, в леталках (когда игрок сидит в кабине) у меня эффект укачивания тоже проявляется на голодный желудок, но намного слабее чем в классическом шутере.
Да, некоторые платформы не могут использовать не-кратные адреса. Но как и у автора статьи у вас идёт подмена типов - а это и есть источник ошибки. При нормальном написании программы - char данные читаем через char*, а int данные через int* - даже на Spark не будет проблем. Но если вы принудительно путаете типы данных - ну увы...
Потому что alignment на большинстве платформ не является обязательным. На x86_64 он желателен с точки зрения работы с кешами, но вовсе не обязателен.
А то что UBSAN вам сообщает - это не undefined behavior а слегка усложненная оптимизация работы с памятью. К стандарту языка это вообще никак не относится.
Аааа... вот где собака порылась!
Вы не правильно перевели фразу с английского.
If the resulting pointer is not correctly aligned for the referenced type, the behavior is undefined
Это не имеет ничего общего с кратностью адреса. Более правильным переводом для aligned for reference type - будет: "сочетается с используемым типом".
В вашем первом примере у вас
это полнейшая чушь с точки зрения типизации. - берем адрес указывающий на первый символ строки (которая содержит имя исполняемого файла), прибавляем к нему единицу и пытаемся прочитать как число. То есть у вас указатель на int читает из указателя на char. Вот это и есть UB в вашем коде, то самое о чём предупреждает текст стандарта. Естественно у вас происходит что-то непонятное и непредсказуемое... Всю остальную статью даже по диагонали читать нет смысла.
Если вам хочется, то можно легко увидеть работу с адресами не кратными четырем на таком примере:
Вы удивитесь, но адрес `a.i2` в этом примере не кратен четырём, но всё работает.
Забавно... С одной стороны эта история и моя, но с другой - я с этим всем практически не пересекался. Как-то так получилось что всё упомянутое входит в "я там был, но где-то сбоку".
О Patisonic я слышал, но, кажется, даже ни разу не видел его вживую. Слишком он был дорогой для моей семьи. В 89-ом, мне тогда еще школьнику, попытались купить "бытовой компьютер" в магазине, но он не завелся, сдали обратно. Но потом купили "Кедр" у кооператива Агат - и он заработал! Черный-черный корпус, полный программный аналог Спектрума с 48Кб памяти. Почти два года у меня были посвящены ассемблеру. Потом плотно пересел на PC и мой личный "Кедр" ушел на вечное хранение в шкаф, не знаю что стало с ним потом, во время переездов. Стоил Кедр при покупке целых 700 рублей - сумасшедшие деньги, но мама расщедрилась.
В 91-ом, стал студентом Педагогического и часто ошивался в классе с MSX на третьем этаже (факультет физики). О человеке с фамилией "Казаринов" - слышал, но личного знакомства не было. Даже не смотря на то что потом я почти шесть лет провел в стенах педагогического, но уже на втором этаже в "лаборатории". И часто бегал по компьютерным классам института - чинил поломанные студентами машины.
Потом были в моей истории и работы в магазине техники и на телевизионщиков пришлось с годик потрудится. Но пересечений с людьми упомянутыми в этой статье не было. Но может и были, но без прямого общения и личных знакомств. Всё же Омск не маленький город...
Из моего опыта "подсказка слов не соотвествующих уровню" - не нужная фича. Больше мешает чем помогает. Просто потому что мой реальный словарь и словарь предполагаемый для уровня не совпадают. Я вижу кучу ненужных подсказок и при этим кучу слов смотрю в словаре.
Так что в итоге, я нафиг отключил эту фичу и читаю чистый текст. А когда действительно надо - тогда и подсматриваю конкретное слово в словаре.
Рекомендую посмотреть, поиграться, и использовать официальный Kindle - и самостоятельное устройство, и программный вариант для андроидных таблеток-телефонов. Они имеют встроеный, всплывающий словарь, переводчик, википедию. Просто нажимаешь на неизвестное слово, держишь палец секунду - слово выделяется и появляется окошко с английским толковым словарем - самое полезное на мой взгляд. Можно покрутить и получить окошко с bing-translator - хреновенький, знает только основной словарь, а редкие слова увы. И есть окошко с википедией - полезно, если автор ссылается на что-то культурологическое, типа имени, то что не является словарным словом.
Так же рекомендуб Fb2Reader - андроидная читалка, и есть варианты для PC. В андроидной - жмешь на слово, в меню выбираешь "глобус" и получаешь гугл-поиск по выбранному слову (или предложению). Потом просто тыкаешь андроидную кнопку "назад", или просто переключаешься обратно в читалку - она не теряет страницу чтения.
И кстати, у вас там на скриншоте ошибка орфографическая - нет такого слова "readed". Прочитано = read. Слово исключение - одинаково пишется и в настоящем и в прошедшем времени, но по разному звучит.
На PaperWhite это точно есть, просто нажать на слово и подержать. Вариант Киндла для Андроида работает точно так-же, кстати.
Переводчик там не амазоновский, а микрософтовский - bing называется. Увы, не перенастраивается и судя по сегодняшнему качеству пользоваться им увы нельзя.
Зато если не пытаться переводить, а читать толковый словарь (окошко словаря, слева от окошка переводчкика), то всё вполне замечательно понимается, без странностей с переводами и без "слово не найдено" для редких слов.
Зачем такие сложности??? Я просто написал более-менее универсальный makefile и копирую его в каталог с тестовой программкой.
А для написания кода использую FAR или Far2l, в зависимости от ОС.
У меня есть сильное ощущение, что вы не сталкивались с выпускниками разных колледжей. Описанный персонаж явно учился в колледже среднего звена. В серьезных колледжах с именем и программа намного серьёзнее. Долг в 130К это явно не IV league (там и четверть миллиона не предел), но и не совсем community колледж - великоват долг для такого. Что-то типа городского, государственного? Либо этот студент учился на что-то другое, а не IT. Если IT у него и было, то как minor или вообще elective courses.
Ну а говоря о собственном опыте - вы описываете собственные проекты, а вовсе не обучение. Это ... не совсем честно, по отношению к студентам. Если во время обучения студент только учился тому чему его учили - он и останется "обученным". Так что даже если он и получил диплом какого-нибудь IV league универа, он всё равно может быть, по факту, студентом. Которому дали возможность изучить несколько технологий под руководством истинных корефеев, но... Редко кто получает во время обучения возможность стать research assistant у профессора или получить профильную работу вне колледжа. Такие студенты обычно идут на мастера или вообще на доктора. А бакалавры почти никогда, они если и работают во время учебы, то только в качестве барист или подобного.
В общем, у вас явно завышенное ожидание от юниоров. К тому-же, наложенное на иммиграцию, которая "задирает" образование. У человека обучавшегося IT за границей есть не совсем профильная, но чрезвычайно важная, для приема на работу проблема - он обучался за границей. Поэтому практически все приезжие IT-специалисты (если им не повезет, конечно) начинают как официальные джуны, даже если у них есть практическая и реальная квалификация на сеньора. А вот местные вчерашние студенты, даже после крутых колледжей, они обычно именно такие и есть.
Двух-экранные десктопы в нашей конторе это стандарт. Когда-то, мы старожилы, показали биг-боссам как это удобно и сейчас двух-головые станции сразу ставят всем новым сотрудникам.
Однако, один из моих коллег постоянно сидит с ноутбуком (10") при том, что у него тут-же на столе стоят два 22" дисплея. Он это объясняяет тем что этот ноутбук он постоянно таскает с собой и он привык к маленькому экранчику. И когда приходя в офис он ставит ноут на док (или включает свой офисный десктоп — у него есть обе возможности!), у него кружится голова от больших экранов. Привычка к маленькому не дает пользоваться большим.
Но лично я действительно не могу отказаться от двухэкранного десктопа и когда ломался один из мониторов у меня была натуральная ломка.
А по английски наоборот — пишу всегда раздельно. Пробовал тренировать английский курсив, но не пошло совсем. В максимуме могу его читать.
Когда учил японский, даже слегка порадовался что нету курсивного письма. Но потом обнаружил «каллиграфию чувства»… высказал мирозданию несколько нецензурных слов. Это конечно не совсем курсив, но читать все равно сложно.
Адреналина ноль, думать ноль, пространства большие.
Иногда агрессивные зверушки появляются, чаще озабоченные sentinels мешаются.
Попадаются очень даже красивые планеты.
Если обращать внимание на монолиты древних, то вполне милая мифология вырисовывается.
В общем это скорее игра для тех кто любит куда-то брести. Без определенной цели на горизонте и не ожидая ничего особенного в итоге брожения. Просто брести…
В идеальном мире, сенатор выслушивает своих избирателей, выдвигает на основе услышанного законопроект и убеждает других сенаторов проголосовать за принятие этого закона…
Ну это в идеальном мире…
И кстати, в леталках (когда игрок сидит в кабине) у меня эффект укачивания тоже проявляется на голодный желудок, но намного слабее чем в классическом шутере.
Вот кстати, любопытная статья: http://www.i4u.com/2016/02/105537/xbox-one-vr-headset-counter-sony-playstation-vr
На практике, Microsoft пока проигрывает эту гонку...