C++ 的内存模型
C++的内存模型由以下几个组成部分:
-
栈(Stack):栈是用于存储局部变量、函数参数、函数调用信息等的一块内存区域。它以后进先出(LIFO)的方式进行管理。栈的分配和释放是自动进行的,当一个函数被调用时,会将函数的局部变量和参数压入栈中,当函数调用结束时,这些变量被自动释放。
-
堆(Heap):堆是一块动态分配内存的区域,用于存储程序运行时动态创建的对象。在堆上分配的内存需要程序员显式地进行分配和释放。C++中,使用
new
操作符来动态分配堆内存,使用delete
操作符来释放堆内存。如果没有释放堆内存,就会导致内存泄漏。 -
代码区(Code Area):代码区是存储程序的可执行指令的区域,也称为文本区。这部分内存是只读的,不允许被修改。代码区的内容在程序的执行过程中不会发生改变。
-
全局区(Global Area):全局区用于存储全局变量和静态变量,包括初始化过的全局变量和静态变量。这些变量在程序启动时就被分配内存,在整个程序执行过程中都存在。
-
常量区(Constant Area):常量区存储程序中的常量数据,如字符串常量等。这部分内存区域是只读的,不允许修改。
-
动态分配(Dynamic Alloc