Java 不同语言的内存管理是否足够相似以转移我的知识?
我刚开始学编程。到目前为止,我对Objective-C中的内存管理有一点了解。学习它并不容易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,其
<> 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++有一个穷人的垃圾收集器[你甚至可以说它只是一个高度可调整的垃圾收集器给穷人))是的,但是智能指针仍然是手动内存管理。您刚刚起草了一些其他代码来帮助完成这项工作。