I'm looking to understand the organization of memory in my programming language, which consists of four primary areas: stack, heap, code, and data. However, I'm unclear about where the programming language stores classes and their associated methods within these memory areas.
Could someone please explain which memory area typically contains the compiled code for classes and their methods? Is it the "code" memory area? Additionally, I'd like to understand the distinction between where class definitions and instances of classes (objects) are stored in memory. Are there any language-specific nuances or optimizations that impact how classes and methods are allocated in memory? I'm eager to gain a better grasp of memory management for classes and methods in my programming language. Any insights or references would be greatly appreciated.
Nuances:
Java: Class metadata, including the bytecode for methods, is stored in a special area called the "Method Area," which is a part of the heap.
Python: Being an interpreted language, Python handles classes as first-class objects, storing both the class definition and its methods in the heap.
C++: Methods that are not virtual are usually inline-expanded, meaning they end up directly in the Code Segment. Virtual methods result in a v-table, stored in the Data Segment, with pointers to the Code Segment.
JavaScript: Due to its dynamic nature, both class definitions and methods are stored in the heap. However, most modern JavaScript engines apply various optimizations like hidden classes and inline caching.