C#入门经典里的门题1(垃圾回收部分)

时间:2022-03-22 00:01:14
在《C#入门经典》作者在说垃圾回收的时候,说到没有.NET之前内存垃圾处理方式,汉化版的原文是这样的。
“在.NET推出以前,这项工作(指的是处理不再使用的某些内存)主要由程序员负责,代码中的几个简单错误会把大块内存分配到错误的地方,使这些内存神秘失踪。这通常意味着计算机的速度逐渐减慢,最终导致系统崩溃”

1.由程序员负责是指用delete()函数释放内存吗?
2.分配到错误的地方是什么意思?
3.失踪就是指内存在热启之前不会被释放吗?

各位能不能用代码(比如C++)或者简单的例子说明一下?

6 个解决方案

#1


1.delete是一个关键字,负责释放与new对应动态申请的内存
2.分配到错误的地方,我的理解是跟你第三个问题一样的,内存泄露。内存只申请了却没释放。

#2


UP

#3


就是说 那些被 new 出来的对象 这些对象在堆分配存储位置,如果

没有NET托管内存 那么 你需要手动把那些new出来的东西都 释放了,

在复杂的 应用中 很可能出现 由于没有 释放某些对象而引起的 内存遗漏现象

程序员不应该花过多精力在 内存这管理这些地方,因为这些地方与业务无关.

"失踪" 或内存遗漏 就是指 指向 堆的指针在释放堆内存资源之前 因为指向其它地方,

比如=null; 或 = 另一个内存地址 而导致的 原先它所指向的那块的地方,不在能够

被 "找到" .

#4


使用了忘记释放的.

#5


忘掉 delete 堆里的对象, 或者数组, 这块内存就没了
有的对象delete了,但是指针没有置0,变成悬垂指针,

还有什么就不知道了,C++只了解一点点

#6


感谢
wodegege10指出错误概念,delete,new我是老记不住,谢谢

ProjectDD的详细解答

还有photoplan的悬垂指针的概念,学习了

和楼上各位的回答和顶帖。

#1


1.delete是一个关键字,负责释放与new对应动态申请的内存
2.分配到错误的地方,我的理解是跟你第三个问题一样的,内存泄露。内存只申请了却没释放。

#2


UP

#3


就是说 那些被 new 出来的对象 这些对象在堆分配存储位置,如果

没有NET托管内存 那么 你需要手动把那些new出来的东西都 释放了,

在复杂的 应用中 很可能出现 由于没有 释放某些对象而引起的 内存遗漏现象

程序员不应该花过多精力在 内存这管理这些地方,因为这些地方与业务无关.

"失踪" 或内存遗漏 就是指 指向 堆的指针在释放堆内存资源之前 因为指向其它地方,

比如=null; 或 = 另一个内存地址 而导致的 原先它所指向的那块的地方,不在能够

被 "找到" .

#4


使用了忘记释放的.

#5


忘掉 delete 堆里的对象, 或者数组, 这块内存就没了
有的对象delete了,但是指针没有置0,变成悬垂指针,

还有什么就不知道了,C++只了解一点点

#6


感谢
wodegege10指出错误概念,delete,new我是老记不住,谢谢

ProjectDD的详细解答

还有photoplan的悬垂指针的概念,学习了

和楼上各位的回答和顶帖。