File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -12,10 +12,10 @@ int* foo {
1212} // 变量a和c的作用域结束
1313````
1414
15- 尽管可以编译通过,但这是一段非常糟糕的代码,现实中我相信大家都不会这么去写。变量a和c都是局部变量,函数介乎后吧局部变量a的地址返回 ,但局部变量a存在栈中,在离开作用域后,局部变量所申请的栈上内存都会被系统回收,从而造成了**悬空指针**的问题。**这是一个非常典型的内存安全问题。很多编程语言都存在类似这样的内存安全问题**。再来看变量c,c的值是常量字符串,存储于常量区,可能这个函数我们只调用了一次,我们可能不再想使用这个字符串,但" xyz" 只有当整个程序结束后系统才能回收这片内存,这点让程序员是不是也很无奈?
15+ 尽管可以编译通过,但这是一段非常糟糕的代码,现实中我相信大家都不会这么去写。变量a和c都是局部变量,函数结束后将局部变量a的地址返回 ,但局部变量a存在栈中,在离开作用域后,局部变量所申请的栈上内存都会被系统回收,从而造成了**悬空指针**的问题。**这是一个非常典型的内存安全问题。很多编程语言都存在类似这样的内存安全问题**。再来看变量c,c的值是常量字符串,存储于常量区,可能这个函数我们只调用了一次,我们可能不再想使用这个字符串,但" xyz" 只有当整个程序结束后系统才能回收这片内存,这点让程序员是不是也很无奈?
1616> 备注:对于" xyz" ,可根据实际情况,通过堆的方式,手动管理(申请和释放)内存。
1717
18- 所以,内存安全和内存管理通常是程序员眼中的两大头疼问题。令人兴奋的是,但Rust却再让你担心内存安全问题 ,也不用再操心内存管理的麻烦,那Rust是如何做到这一点的?请往下看。
18+ 所以,内存安全和内存管理通常是程序员眼中的两大头疼问题。令人兴奋的是,Rust却不再让你担心内存安全问题 ,也不用再操心内存管理的麻烦,那Rust是如何做到这一点的?请往下看。
1919
2020### **绑定(Binding)**
2121好了,先来看下以下一段Rust代码:
You can’t perform that action at this time.
0 commit comments