170 похожих чатов

А является ли УБ каст указателя на одну структуру к

указателю на другую, если у них одинаковые поля?
Предположим, компиляция происходит в рамках одного проекта одним компилятором с одинаковыми настройками

27 ответов

16 просмотров

Да вроде, мы же не в Си)

если это два никак не связанных типа, что, видимо, так, то да

Dmitriy-[Отпуск] Автор вопроса
Danya🔥
Да вроде, мы же не в Си)

Вот это уже интереснее: в Си - не УБ?

Vlad
если это два никак не связанных типа, что, видимо,...

в отличие от многого другого, касты определены как исчерпывающий список разрешенных преобразований, так что с ними довольно просто

Vlad
если это два никак не связанных типа, что, видимо,...

То есть, один и тот же компилятор может их (типы) создать по-разному?

Dmitriy-[Отпуск] Автор вопроса
d7d1cd
То есть, один и тот же компилятор может их (типы) ...

ничто ему не запрещает, насколько я знаю как мысленный эксперимент могу предложить случайное добавление padding байтов в типы, что делает их разными внутри, но не влияет на наблюдаемое поведение

Dmitriy-[Отпуск] Автор вопроса
Vlad
ничто ему не запрещает, насколько я знаю как мысл...

Тогда следующий вопрос. Допустим, у нас есть некоторая struct Data (POD, конечно), определенная в общем хедере. Я её побайтово сериализую в буфер, и, например, отправляю его в драйвер ядра. Исходники драйвера используют тот же самый хедер с определением структуры. Можно ли кастить указатель на буфер к Data* при одинаковых настройках выравнивания при компиляции драйвера и пользовательского приложения?

Конечно это УБ.

Dmitriy [Отпуск]
Тогда следующий вопрос. Допустим, у нас есть некот...

Это можно точно, потому что буфер был получен изначально как память именно этого типа данных

Dmitriy [Отпуск]
Тогда следующий вопрос. Допустим, у нас есть некот...

1) pod понятие не очень точное для текущего стандарта. в этом случае требование звучит как trivially copyable 2) сразу кастить указатель на буфер к указателю на Data нельзя. надо создать объект Data сначала

Dmitriy-[Отпуск] Автор вопроса
Dmitriy-[Отпуск] Автор вопроса
Dmitriy-[Отпуск] Автор вопроса
Ilya Zviagin
Это можно точно, потому что буфер был получен изн...

Но про выравнивание я неслучайно уточнил...

Dmitriy [Отпуск]
И скопировать в него буфер?

Ну это чисто формально, под стандарту чтобы типа там началась время жизни этого объекта. Фактически это не нужно. (Если pod у нас)

Dmitriy [Отпуск]
Но про выравнивание я неслучайно уточнил...

Ты вроде как хотел копировать туда, при чем тут выравнивание?

Dmitriy-[Отпуск] Автор вопроса
Ilya Zviagin
Так он туда будет его копировать.

Можно даже не копировать, а передать указатель на объект структуры в качестве указателя на буфер

Dmitriy-[Отпуск] Автор вопроса
Ilya Zviagin
Ты вроде как хотел копировать туда, при чем тут вы...

Например, в VS для usermode-приложений стоит автоматическое определение выравнивания. Для дров по умолчанию указано 8. Понятно, что мы должны чекнуть размер буфера , но вдруг структур в буфере будет несколько и его общий размер окажется кратным размеру структуры, ожидаемому драйвером - получим неприятности

Dmitriy [Отпуск]
И скопировать в него буфер?

да если выравнивание и размеры совпадают, то объект получит нужное вам значение, которое соответствует представлению (байтам), которое вы копируете

Dmitriy [Отпуск]
Например, в VS для usermode-приложений стоит автом...

А что за автоматическое выравнивание, если оно вообще не обязательное на интеле?

Dmitriy-[Отпуск] Автор вопроса
Ilya Zviagin
А что за автоматическое выравнивание, если оно воо...

Например, структура из набора int/short/char будет выровнена по 4б, а не 8

Да

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта