在项目中遇到一个数据获取的问题。
采用Rust & C 编写, 通过FFI 实现交互,在打通两者之后,发现了一个问题。
在Rust 端, 用Vec 的形式保存了大量的数据。 由于写文件的速度较慢,只能转到C 端处理。
通过获取该vector 地址的ptr, 过ffi 传给C后, 通过该地址去访问。获取的数据不是预期的数据,显示的都是异常的值。
Rust code:
let a = format!("{:?}", prover.a.as_ptr());
let a_1 = &a.as_bytes();
info!("a: value:{:?}\n",ax);
let b = format!("{:?}", prover.b.as_ptr());
let b_1 = &b.as_bytes();
let c = format!("{:?}", prover.c.as_ptr());
let c_1 = &c.as_bytes();
let aux = format!("{:?}", prover.aux_assignment.as_ptr());
let aux_1 = &aux.as_bytes();
let input = format!("{:?}", prover.input_assignment.as_ptr());
let input_1 = &input.as_bytes();
rust_init_prove(
a_1.as_ptr(), prover.a.len(),
b_1.as_ptr(), prover.b.len(),
c_1.as_ptr(), prover.c.len(),
aux_1.as_ptr(), prover.aux_assignment.len(),
input_1.as_ptr(), prover.input_assignment.len());
info!("Set info !indes:{:?} Finish!\n",ix);
C code:
Scalar data = *(Scalar *)(provers[i].a_path );
for(int t = 0 ; t < 4; t++)
{
// printf("Data: index:%d. 0x%08x\n",t, data.fr.l[t]);
printf("Data: index:%d. 0x%016lx\n",t, data.fr.l[t]);
fflush(stdout);
}
printf("Data: 0x%016lx\n",data.fr);
fflush(stdout);
有什么合理的方式,能让C 获取rust vector 保存的数据吗
写文件慢,换SSD硬盘或RamDisk不香吗?
每秒10G Bytes
根本就不存在带宽这么大的总线和存储介质