Size: a a a

Rust — русскоговорящее сообществo

2020 October 06

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Это про сложение указателей
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Вычитание аналогично
> When two pointers are subtracted, both shall point to elements of the same array object,or  one  past  the  last  element  of  the  array  object;  the  result  is  the  difference  of  thesubscripts  of  the  two array  elements
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Это про сложение указателей
это сложение а не получение внешнего адреса
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Ну да вы на разные части вопроса отвечаете
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Провенанс безусловно является частью логики компиляторов
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Но вот что там в стандарте я незнай
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Alexander Tchitchigin
А я именно там и видел. 🧐
мне вот интересен где мне вот найти пункт про то что только адресс от маллок валиден
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
Boris Vinogradov
мне вот интересен где мне вот найти пункт про то что только адресс от маллок валиден
Вполне возможно, что этот момент я запомнил неправильно. Или неправильно понял. Если не забуду — позже перечитаю стандарт.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Boris Vinogradov
мне вот интересен где мне вот найти пункт про то что только адресс от маллок валиден
С натяжкой можно вот это использовать:
6.2.4.1 пишет, что
> An  object  has  astorage durationthat  determines  its  lifetime .There  are  four  storage durations:  static,  thread,  automatic,  and  allocated. Allocated  storage  is  described  in 7.22.3.
7.22.3 — это список библиотечных функций для аллокации (malloc, realloc etc)
Очевидно, объект, аллоцированный с помощью нестандартных механизмов не может иметь static, thread или automatic storage duration, а по 7.22.3 не может иметь и allocated storage duration. Стало быть, у такого объекта нет лайфтайма, чего не может быть, согласно 6.2.4.1.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Emmanuel Goldstein
С натяжкой можно вот это использовать:
6.2.4.1 пишет, что
> An  object  has  astorage durationthat  determines  its  lifetime .There  are  four  storage durations:  static,  thread,  automatic,  and  allocated. Allocated  storage  is  described  in 7.22.3.
7.22.3 — это список библиотечных функций для аллокации (malloc, realloc etc)
Очевидно, объект, аллоцированный с помощью нестандартных механизмов не может иметь static, thread или automatic storage duration, а по 7.22.3 не может иметь и allocated storage duration. Стало быть, у такого объекта нет лайфтайма, чего не может быть, согласно 6.2.4.1.
...нет, 6.2.4.1 это не айпи, это всего лишь секция
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Ну и, соответственно, указатель на некорректный объект сам является некорректным по 6.2.5.20 или вроде того
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
а как быть с extern и хардварью?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Boris Vinogradov
а как быть с extern и хардварью?
В плане? Объект с external linkage и без _Thread_local имеет static storage duration по 6.2.4.3
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
В плане? Объект с external linkage и без _Thread_local имеет static storage duration по 6.2.4.3
это один кейс а второй
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Я не понял, что ты имеешь в виду под «как быть с хардварью»
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Я не понял, что ты имеешь в виду под «как быть с хардварью»
у тебя есть области памяти которые тебе провайдятся со стороны железа и помеченные как volatile
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Boris Vinogradov
у тебя есть области памяти которые тебе провайдятся со стороны железа и помеченные как volatile
В плане, как это выглядит в сишном коде?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Просто созданием указателя через void* a = 1234;?
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Просто созданием указателя через void* a = 1234;?
нее, не воид а именно реальных типов - у тебя mmap по факту так и работает
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Создание указателя из числа это unspecified behaviour
источник