RUST: 如何理解字符串,字符串字面量和字符串切片
如何理解String,str与&str 字符串,字符串字面量和字符串切片是初学 rust 最困惑的一点,一部分是因为它的各种用法繁杂,经常使用;另一部分也是因为它们所提供的方法繁多,并且有着令人疑惑的相互转换。虽然常读常新,但还是想写一篇博客,分享之外也可以让自己在困惑时快速找到参考而不用翻阅大量网页。 从内存开始 通过了解字符串在内存中的表示,我们可以最直观的了解到他们的不同之处,考虑下面的代码和他们创建的布局。 let s1 = String::from("Hello"); let s2 = &s1[1..]; let s3 = "Hello"; 他们的内存布局如下 my_name:s1(String) my_name: s2(&str) my_name:s3(&str) [----------------] [–––––––––––] [--------------] +---+---+---+ +–––+–––+ +---+---+ stack frame | • | 6 | 5 | │ • │ 4 │ | • | 4 | +-|-+---+---+ │–+–+–--+ +-|-+---+ | | | | +-------------+ | | | | +-V-+-V-+---+---+---+---+ | heap frame | H | e | l | l | o | | | +---+---+---+---+---+---+ | | | | | preallocated +–-–+–V–+–––+–––+–––+–––+ read-only │ H │ e │ l │ l │ o │ │ memory +–––+–––+–––+–––+–––+–––+ 我们可以发现下面几条事实: ...