内存组织:类和方法存储在哪里?

问题描述 投票:0回答:1

我希望了解我的编程语言中的内存组织,它由四个主要区域组成:堆栈、堆、代码和数据。但是,我不清楚编程语言在这些内存区域中存储类及其关联方法的位置。

有人可以解释一下哪个内存区域通常包含类及其方法的编译代码吗?它是“代码”内存区域吗? 此外,我想了解类定义和类(对象)实例在内存中存储位置之间的区别。 是否存在任何特定于语言的细微差别或优化会影响类和方法在内存中的分配方式? 我渴望更好地掌握编程语言中类和方法的内存管理。任何见解或参考将不胜感激。

c++ class memory stack heap
1个回答
0
投票

代码段:存储方法编译后的代码的地方。 数据段:存储静态变量和有时元数据的位置。 堆:存储对象(实例)以及(在 Python 和 Java 等某些语言中)类元数据和方法的存储位置。 堆栈:存储局部变量(包括对堆分配对象的引用)的位置。

细微差别:

Java:类元数据,包括方法的字节码,存储在称为“方法区”的特殊区域中,它是堆的一部分。

Python:作为一种解释性语言,Python 将类视为一等对象,将类定义及其方法存储在堆中。

C++:非虚拟方法通常是内联扩展的,这意味着它们直接位于代码段中。虚拟方法会生成一个 v 表,存储在数据段中,其中包含指向代码段的指针。

JavaScript:由于其动态特性,类定义和方法都存储在堆中。然而,大多数现代 JavaScript 引擎都应用了各种优化,例如隐藏类和内联缓存。

© www.soinside.com 2019 - 2024. All rights reserved.