avatar-decorate
获赞
5191
粉丝
211
关注
224
看过 TA
642
西昌学院
2011
golang
IP属地:北京
微信公众号:福大大架构师每日一题
私信
关注
2020-09-27
在牛客打卡61天,今天也很努力鸭!
苍古自由之誓:在某乎也看到这个了。菜鸡百度一波,有问题请指正。 总线锁定把CPU和内存的通信给锁住,使得在锁定期间,其他处理器不能操作其他内存地址的数据,从而开销较大。
0 点赞 评论 收藏
分享
2020-09-25:rust中Point是结构体类型,【let p1=Point{x:25,y:25};let p2=p1;】请问p1和p2是同一个对象吗?福哥答案2020-09-25:#福大大架构师每日一题# 不是同一个对象。p1和p2直接存内容,不存地址。这点跟java里的new对象是不一样的。p1.x和p1的地址相同,说明p1存的是内容,而不是地址。p1.x和p2.x的地址不同,说明p1和p2的内存空间不一样,不是同一个对象。 有些人会抬杠,说rust里没有对象。rust我学得不深入,难免会出错。反汇编,我还没看,不排除rust做了优化。有不对的地方,请直接留言,表达自己的观点,我欣然...
牛客890463602号:我认为是不是同一个对象不能从地址去判断,而更应该从语义上去看。比如下面这种情况,p1 和 p2 的地址是一样的,同样是 move,所有权转移: fn my_func() -> Point { let p1 = Point { x: 25, y: 25 }; println!("p1.x address: {:p}", &(p1.x)); println!("p1 address: {:p}", &p1); println!("p1.x和p1的地址相同,说明p1存的是内容,而不是地址。"); println!("------------"); p1 } fn main() { let p2 = my_func(); println!("p2.x address: {:p}", &(p2.x)); println!("p2 address: {:p}", &p2); println!("p1.x和p2.x的地址不同,说明p1和p2的内存空间不一样,不是同一个对象。"); } 但能因为地址一样就说它们是同一个对象吗? 你可以在我这段代码的基础上在main函数最开始再多调用一次my_func(),你会发现p1和p2的地址值又不相等了,难不成这俩是不是一个对象还依赖第三者?你认为p1和p2的关系不是早上在家的你和上午上班的你这种关系, 是因为你还带着其它语言的思维,在“在家的你和公司的你是不是一个人”的问题上,你上班是做地铁还是开车还是坐传送门真的重要吗?就像在 Rust 里,move 前后的对象无论地址是否相等都可以认为是一个对象, 跟地址是不是相等、是不是通过拷贝实现、还是直接优化掉这些具体实现是两回事。
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务