【发布时间】:2018-12-07 15:43:21
【问题描述】:
我正在编写不安全的 sn-p 代码来模拟 C 如何为 int 分配内存。代码为isize类型分配内存,将0赋值给指针变量,然后每秒无限递增地址处的值
use std::process;
use std::{thread, time};
use std::alloc::{alloc, Layout};
fn main() {
unsafe {
let layout = Layout::new::<isize>();
let p = alloc(layout);
println!("({}) address pointed to by p: {:p}", process::id(), p);
*(p as *mut isize) = 0;
loop {
thread::sleep(time::Duration::from_millis(1000));
*(p as *mut isize) += 1;
println!("({}) p: {}", process::id(), *(p as *mut isize));
}
}
}
但是,对于每个 *(p as *mut size),我可以只替换为 *p 而编译器不会抱怨(即 *p = 0;),因此我认为它是正确推断的。我需要帮助解释差异,在这种情况下可能需要显式类型注释。
【问题讨论】:
-
如果您想知道编译器为变量推断出什么类型,只需将
let () = variable;放在某处即可。 -
谢谢@SebastianRedl
标签: pointers memory-management rust unsafe-pointers