Сережа
Я не знаю как ваш жмаллок работает но вряд ли он «объекты» в памяти перетасовывает
Сережа
Так что он не умный
Loyd
А как ты себе перетасовывание представляешь?
Max
О, еще один глупый вопрос вроде по теме: почему иногда функции принимают мутабельную ссылку и кладут туда результат, а не просто возвращают его? fn some(buf: &mut [u8]); VS fn some() -> [u8]; Типо так будет производительней?
Loyd
Ссылки все протухают?
Сережа
Вон выше определение написали
Nikolay Markov
分解物質
он не знает об объектах
это реализация malloc() а не new
Сережа
И куски перетасовывает?
Сережа
Ну это другое дело
Nikolay Markov
А как ты себе перетасовывание представляешь?
https://www.facebook.com/notes/facebook-engineering/scalable-memory-allocation-using-jemalloc/480222803919/
Nikolay Markov
Ну это другое дело
а кто-то писал иначе?
Nikolay Markov
а, ну да, я некорректно выразился
Nikolay Markov
разумеется, он не компактизирует объекты языка, он плотностью упаковки кусков занимается
Сережа
Это был сарказм
Nikolay Markov
пробежался, какие-то общие слова
https://people.freebsd.org/~jasone/jemalloc/bsdcan2006/jemalloc.pdf
Loyd
Интересно, конечно, но повторю ещё раз: что делать с существующими ссылками на память?
պլհկ
Ничего, перетасовка обьектов это маняфантазии
Anonymous
В гц их мутатор перепишет
Сережа
Жвм перетасовывает, цлр перетасовывает, а жмаллок нет)))
Loyd
И..... что используется в кейса, где rc/gc неприменим?
Сережа
Систем аллокатор))))
Anonymous
Ничего
Сережа
Или статик массив Чаров на микроконтроллере)))
Сережа
В чате про раст живо обсуждаются перемещающие аллокатор, а вопросы про раст игнорируются))))
Max
Ну там не совсем про руст вопрос
Сережа
Точно, тебе в чатик системных архитекторов
Max
Не, это слишком
Vladimir
Или ты про кейс когда длина известна?
Ignat
перемещающие гербейж коллекторы!
Max
[u8] там лишь для примера Я прост биндинг к openh264 пишу, там в EncodeFrame такой принцип (у VP[8,9] такая же ситуация)
Vladimir
Ну вообще кажется что так в общем случае оптимальнее
Vladimir
+ апи проще
Vladimir
Не нужно самому после вызова таких функций делать memcpy
Vladimir
copy_from_slice и тд
Vladimir
Буфер на стеке
Vladimir
Не такая уж проблема
Vladimir
Знаешь ли
Ignat
ну одна из основных, во всяком случае
Vladimir
Ты и так будешь переиспользовать стек. Так что незачет
Ignat
щас бы возвращать буфер на стеке
Ignat
или о чём ты
Сережа
С эскейп анализисом как в го
Vladimir
щас бы возвращать буфер на стеке
В его коде так и возвращается
Vladimir
Але
Vladimir
Или где по твоему [u8;255] выделит?
Vladimir
fn x()->[u8;255]
Сережа
Я на си так делал, главное до вызова других функций буфер этот использовать
Ignat
типичные сишники с «моё уб не уб»
Сережа
Ты хотел сказать хакиры, в хорошем смысле
Max
Ок, тогда еще один вопрос: есть "грязный" struct, который сгенерировал bindgen (на скрине) Я хочу написать такую же структуру только "чистую" (с нормальными именами, но такой же структурой). Можно просто копировать, но как понимаю будет оптимальней использовать mem::transmute() (но небезопасно, конечно) (переживаю о *mut)
Ignat
нет, не хотел
Max
Сережа
И это наверняка не уб а имплементейшн дефайнд
Ignat
одно дело, если ты там pwn-таску решаешь и в буфере лежит какой-нибудь пароль или шеллкод
Ignat
и совсем другое, если ты полагаешься на это в продакшон-коде
Сережа
Ты видел, что я здесь пишу, я невменяем. Какой продакшон код?
Ignat
И это наверняка не уб а имплементейшн дефайнд
If an object is referred to outside of its lifetime, the behavior is undefined
Filipp
Или где по твоему [u8;255] выделит?
Если функция не заинлайнится, то во фрейме вызываемой функции и после ее возвращения будет копироваться выше
Сережа
А если результат функции не будут получать будет копироваться?
Max
А в что ты указатели будешь трансмьютить?
Понял, нельзя так То есть придется копировать, как понимаю
Сережа
И если будет, то куда?
Filipp
Я кстати не Лев толстой совсем, я чисто логически рассуждаю
Сережа
Да, а я думал что будет без оптимизаций
Сережа
Значение из функции возвращается через стек
Сережа
Внутри функции ты не знаешь требуется ли вовне это значение
Vladimir
Понял, нельзя так То есть придется копировать, как понимаю
если указатели в указатели, то можно, в usize можно, только осторожно, по этому и спрашиваю в что. в ссылки нельзя
Сережа
В конце ложишь его на стек
Filipp
У тебя же сигнатура есть