facilitate zero-copy network programming by allowing multiple Bytes objects to point to the same underlying memory. This is managed by using a reference count to track when the memory is no longer needed and can be freed.
смотрю определение структуры Bytes:
'''
pub struct Bytes {
ptr: *const u8,
len: usize,
// inlined "trait object"
data: AtomicPtr<()>,
vtable: &'static Vtable,
}
'''
тут data это atomicPtr который не Arc. Я смотрю куда-то мимо?
Счётчик ссылок лежит в памяти, на которую указывает data
ткните плиз пальцем, вот не вижу счетчика, хотя понимаю что дожен быть ) https://github.com/tokio-rs/bytes/blob/master/src/bytes.rs
/// For Bytes implementations which refer to constant memory (e.g. created /// via Bytes::from_static()) the cloning implementation will be a no-op. /// /// For Bytes implementations which point to a reference counted shared storage /// (e.g. an Arc<[u8]>), sharing will be implemented by increasing the /// the reference count.
AtomicPtr = *mut _, но с атомик доступом, и для них не выделяется память в куче
Обсуждают сегодня