Java 不同语言的内存管理是否足够相似以转移我的知识?

Java 不同语言的内存管理是否足够相似以转移我的知识?,java,c++,c,objective-c,memory-management,Java,C++,C,Objective C,Memory Management,我刚开始学编程。到目前为止,我对Objective-C中的内存管理有一点了解。学习它并不容易 P> >出于好奇,在C语言、C++语言、java语言等的语言中,内存管理是否与我所学的类似? < P>不,它可以在平台间发生显著变化,甚至在同一平台上,也可以有各种不同的选择。(例如,在C++中,可以使用自动指针、Boem GC等) 请注意,Java和.NET的内存管理基本相似。内存管理有两种不同的风格:非托管和托管 非托管是由程序员负责内存分配的C/C++ Managed类似于Java/.Net,其

我刚开始学编程。到目前为止,我对Objective-C中的内存管理有一点了解。学习它并不容易


<> P> >出于好奇,在C语言、C++语言、java语言等的语言中,内存管理是否与我所学的类似?

< P>不,它可以在平台间发生显著变化,甚至在同一平台上,也可以有各种不同的选择。(例如,在C++中,可以使用自动指针、Boem GC等)


请注意,Java和.NET的内存管理基本相似。

内存管理有两种不同的风格:非托管和托管

非托管是由程序员负责内存分配的C/C++

Managed类似于Java/.Net,其中内存分配给您,但由虚拟机清理(“垃圾回收”)


<>这两种味道会发现很多变化。

< P>我不知道Objtojava中内存是如何管理的,但是C和C++使用了手动内存管理,Java内置了垃圾收集,不允许手动内存管理。所以他们非常不同。

不,是不同的

在Java和.NET语言中,有自动内存管理的概念,它涉及垃圾收集器。垃圾收集器的实现也因语言和平台而异

C/C++没有自动内存管理,程序员自己负责管理内存

简而言之,不同的语言有不同的含义。

G'day

关于不同语言中的内存管理,您唯一可以说的是目标。即:

  • 为要播放的进程提供固定的内存块
  • 保护此块之外的内存不被进程访问
  • 为流程中的变量/对象/函数等提供动态分配机制
  • 确保这些项的内存分配是在合理的边界上完成的,从处理器的角度来看是合理的
  • 根据需要提供释放内存的机制
  • 清理(垃圾收集)未使用的对象
  • 将碎片内存合并到连续的已占用内存池中
  • 等等
各种语言和运行时环境提供了至少实现其中一些功能的机制


干杯,

内存管理方法因语言和平台的不同而差异很大,不仅在程序员的可视性和控制级别上,而且在实现方面也是如此

即便如此,当您进入操作系统级别时,分配和释放内存的基本原理大致相同。当然存在差异、调整和优化,但程序员通常不必处理这些细节

Objective-C是一种有趣的混合语言,因为该语言的2.0版添加了opt-in垃圾收集,但保留了使用引用计数(retain/release/autorelease)的能力。事实上,根据编译标志和同一进程中加载的其他代码的设置,相同的代码可以在任一模式下运行。这对于编程语言来说是不典型的-通常您根据所编写的代码获得托管(自动)或非托管(手动),有时语言/平台根本不提供供您选择的方式(例如Java)


一种风格并不一定比另一种好,而且对于“真正的程序员[不]使用垃圾收集”是否存在偶尔的宗教争论,但不要过分担心它。关于各种内存管理方法如何不会伤害任何人的一般知识,了解您编写代码所用语言的方法通常就足够了。

从技术上讲,C/C++内存管理是手动的。但是在C++中,智能指针的问题被严重地削弱了(把它看作是C++有一个穷人的垃圾收集器[你甚至可以说它只是一个高度可调整的垃圾收集器给穷人))是的,但是智能指针仍然是手动内存管理。您刚刚起草了一些其他代码来帮助完成这项工作。