Size: a a a

2020 October 30

CD

Constantine Drozdov in pro.cxx
Если ты хочешь научиться оперировать напрямую бинарным представлением объектов (как в бинарной сериализации) у тебя нет выбора - ты просто явно должен использовать aliased тип
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
Я все еще не очень понимаю, какой эффект ты хочешь добиться в этом плане
Ну вот например read, хочу читать в mutable span. Не объекты, просто строку например. И хочу не шаблонную функцию.
источник

DS

Dmitry Sokolov in pro.cxx
read(void* dst, size_t capacity)
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
read(void* dst, size_t capacity)
ты обязан тут использовать aliased тип, если dst может использовать как хранилище некоторого типа
источник

CD

Constantine Drozdov in pro.cxx
твои чтения/записи этого буфера не означают утверждений о типе объекта в области памяти - считай это суть aliased типа
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
твои чтения/записи этого буфера не означают утверждений о типе объекта в области памяти - считай это суть aliased типа
Ну и вот это проблема. Мне для записи нужно будет сделать cast void* => std::byte*
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Ну и вот это проблема. Мне для записи нужно будет сделать cast void* => std::byte*
Да, именно
источник

CD

Constantine Drozdov in pro.cxx
То, что некоторые чтения и записи не могут взаимодействовать - это следствие того, что два объекта кроме исключений не могут находиться в одной области памяти, это restrict, который следствие aliasing
источник

CD

Constantine Drozdov in pro.cxx
Но это разные вещи, одно из другого следует
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
Но это разные вещи, одно из другого следует
Есть внутри библиотеки какие то потроха, которые в процессе записи как-то используются. Если пишем в aliased* и компилятор не может доказать, что эти переменные не могут алиаситься с буфером записи, это приводит к неоптимальному коду.
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Есть внутри библиотеки какие то потроха, которые в процессе записи как-то используются. Если пишем в aliased* и компилятор не может доказать, что эти переменные не могут алиаситься с буфером записи, это приводит к неоптимальному коду.
Именно так, но проблема не в использовании aliased типа, а в том, что любой aliased тип является unrestricted
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
Именно так, но проблема не в использовании aliased типа, а в том, что любой aliased тип является unrestricted
Но можно пойти на UB и писать через unaliased*.
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Есть внутри библиотеки какие то потроха, которые в процессе записи как-то используются. Если пишем в aliased* и компилятор не может доказать, что эти переменные не могут алиаситься с буфером записи, это приводит к неоптимальному коду.
То есть сам по себе aliasing надо воспринимать так: как только unaliased тип читается/пишется, его тип физически прожигается в памяти
источник

CD

Constantine Drozdov in pro.cxx
Очевидно, что ты не имел в виду в своей read такого прожигания, и отсутствие взаимодействий следствие чего-то другого
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Но можно пойти на UB и писать через unaliased*.
И это жесточайший костыль, потому что ты используешь тот факт, что компилятор не прожигал оперативку физически :)
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
И это жесточайший костыль, потому что ты используешь тот факт, что компилятор не прожигал оперативку физически :)
Ну смотри, например буфер это указатель и в каком-то виде capacity + size например. Я для начала использую тот факт что буфер как структура через указатель не алиасится сам с собой.
источник

DP

Denis Paukaev in pro.cxx
Constantine Drozdov
То есть сам по себе aliasing надо воспринимать так: как только unaliased тип читается/пишется, его тип физически прожигается в памяти
даже только для чтения?
источник

CD

Constantine Drozdov in pro.cxx
Denis Paukaev
даже только для чтения?
да, reinterpret_cast запрещает читать
источник

RR

Roman Rubanenko in pro.cxx
Neargye
@antoshkka
http://josuttis.com/download/std/D2012R0_fix_rangebasedfor_201029.pdf
что думаешь о таком замечательном предложение?
я где-то подобное уже видел просто
Красиво
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Ну смотри, например буфер это указатель и в каком-то виде capacity + size например. Я для начала использую тот факт что буфер как структура через указатель не алиасится сам с собой.
Но это же неверное утверждение - видел, как vector<char> кладется сам в себя?
источник