< 返回版块

chaoxi24 发表于 2021-04-04 02:58

请问如何获取一个自定义结构的地址?或者说如何让其支持 as_ptr()? 我要将这个结构的二进制数据复制到内存中,需要的两个参数是结构地址和size,size好计算,地址就不知道怎么获取了。 谢谢。

评论区

写评论
作者 chaoxi24 2021-04-05 19:03

谢谢。

--
👇
Bai-Jinlin: 这个你得具体类型具体分析呀,String你要复制就as_bytes之后复制&[u8]就行了,要是有个类型是这样的

struct A<T> {
    ptr: *const T,
    len: usize,
}

那你不就得自己用原始指针和对应的长度手动复制了吗

Bai-Jinlin 2021-04-04 16:57

这个你得具体类型具体分析呀,String你要复制就as_bytes之后复制&[u8]就行了,要是有个类型是这样的

struct A<T> {
    ptr: *const T,
    len: usize,
}

那你不就得自己用原始指针和对应的长度手动复制了吗

--
👇
chaoxi24: 谢谢。这意味着无法直接将结构内的String通过结构地址复制出去了是吗?只能将其转换类似vec[u16]之类的数据。

--
👇
johnmave126: String的内存分配在堆上,实际通过指针访问,本来就不是结构大小的一部分。

运行时的话,可以考虑这个这个,算出实际分配的大小。

作者 chaoxi24 2021-04-04 14:07

谢谢。这意味着无法直接将结构内的String通过结构地址复制出去了是吗?只能将其转换类似vec[u16]之类的数据。

--
👇
johnmave126: String的内存分配在堆上,实际通过指针访问,本来就不是结构大小的一部分。

运行时的话,可以考虑这个这个,算出实际分配的大小。

johnmave126 2021-04-04 05:16

String的内存分配在堆上,实际通过指针访问,本来就不是结构大小的一部分。

运行时的话,可以考虑这个这个,算出实际分配的大小。

--
👇
chaoxi24: 谢谢。顺便请问怎样获取结构的真实大小啊,"std::mem::size_of::()"只能获取初始大小,包含String的可变键值就无法计算出来了

作者 chaoxi24 2021-04-04 04:10

谢谢。顺便请问怎样获取结构的真实大小啊,"std::mem::size_of::()"只能获取初始大小,包含String的可变键值就无法计算出来了

--
👇
johnmave126: &var as *const _或者&var as *mut _

johnmave126 2021-04-04 03:32

&var as *const _或者&var as *mut _

1 共 6 条评论, 1 页