Skip to content

Commit 227fe59

Browse files
committed
Merge pull request #109 from zhongke/patch-1
Update 12-01-ownership.md
2 parents 0af95c1 + d79b9f2 commit 227fe59

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

12-ownership-system/12-01-ownership.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff 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代码:

0 commit comments

Comments
 (0)