首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >请问内存分配和垃圾回收有什么不同?

请问内存分配和垃圾回收有什么不同?
EN

Stack Overflow用户
提问于 2012-02-08 04:14:45
回答 5查看 2.8K关注 0票数 1

我知道“垃圾回收”是一种内存管理形式,它是一种自动回收未使用内存的方法。

但是什么是“内存分配”和“垃圾收集”的概念区别呢?

EN

回答 5

Stack Overflow用户

发布于 2012-02-08 04:17:41

它们是两极对立面。所以,是的,有很大的区别。

分配内存是申请内存空间以存储内容的过程。

垃圾收集(或释放内存)是将该内存释放回可用内存池的过程。

许多较新的语言在声明/初始化变量时都会在后台为您执行这两个步骤,并超出范围。

票数 6
EN

Stack Overflow用户

发布于 2012-02-08 04:17:34

内存分配是向系统请求一些内存以用于某些用途的行为。

垃圾收集是一个检查以前分配的一些内存是否不再真正在使用(即不再可以从程序访问)以自动释放它的过程。

一个微妙的地方是the objective of garbage collection is not actually "freeing objects that are no longer used", but to emulate a machine with infinite memory,允许你继续分配内存,而不关心释放它;因此,它不能代替管理其他类型的资源(例如,文件句柄,数据库连接,等等)。

票数 3
EN

Stack Overflow用户

发布于 2012-02-08 04:22:01

一个简单的伪代码示例:

代码语言:javascript
复制
void myFoo()
{    
    LinkedList<int> myList = new LinkedList<int>();
    return;
}

这将在堆上请求足够的新空间来存储LinkedList对象。然而,当函数体结束时,myList就消失了,您无论如何也不再知道这个LinkedList存储在哪里(内存地址)。因此,绝对没有办法告诉系统释放该内存,并使其在以后再次可用。

Java垃圾收集器将自动为您做这件事,代价是一些性能,并且还引入了一些不确定性(您不能真正知道何时调用GC )。

C++中,没有本机垃圾收集器(到目前为止?)。但是管理内存的正确方法是使用smart_pointers (例如,std::auto_ptr (在C++11中已弃用)、std::shared_ptr等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9183197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档