1. 内存的存储方案
在C++中,变量和对象都需要被存储在内存中以供程序使用。内存分为栈(Stack)和堆(Heap)两种存储方式。
1.1 栈
栈是一种自动分配和释放内存的数据结构,使用后会自动回收内存。栈是按照“先进后出”的顺序存储数据。当一个函数被调用时,栈会为函数分配一块内存空间,用于存储函数的局部变量、函数参数和返回地址等信息。当函数执行完成后,栈会自动释放这块内存空间。
void func() {
int x = 10; // 在栈中分配内存
}
1.2 堆
堆是一种手动分配和释放内存的数据结构,需要程序员手动申请和释放内存。堆中的内存需要手动分配,手动释放,否则会造成内存泄漏。堆中的内存没有固定分配和释放的顺序,可以根据程序的需要进行随时分配和释放。
int* p = new int; // 在堆中分配内存
delete p; // 释放内存
2. 动态分配new
C++中,使用new运算符可以动态分配内存,即在堆中分配内存。动态分配内存可以使得程序运行时根据需求动态地申请和释放内存。动态分配的内存在没有被手动释放时会一直存在,直到程序结束才会自动释放。
2.1 动态分配单个变量内存
使用new运算符可以动态分配堆内存来存储单个变量。
int* p = new int; // 在堆中分配一个int类型的变量
*p = 10; // 给p所指向的内存赋值为10
delete p; // 释放p所指向的内存
2.2 动态分配数组内存
使用new运算符还可以动态分配堆内存来存储数组。
int* arr = new int[5]; // 在堆中分配一个含有5个int元素的数组
for (int i = 0; i < 5; i++) {
arr[i] = i; // 给数组元素赋值
}
delete[] arr; // 释放数组内存
2.3 动态分配对象内存
使用new运算符还可以动态分配堆内存来存储对象。
class MyClass {
// 类的成员和方法
};
MyClass* obj = new MyClass(); // 在堆中分配一个MyClass对象
// 对象的操作
delete obj; // 释放对象内存
总结
C++中的内存存储方案包括栈和堆两种。栈是自动分配和释放内存的数据结构,堆是手动分配和释放内存的数据结构。使用new运算符可以动态分配堆内存,可以动态分配单个变量、数组和对象的内存。记得使用delete或delete[]来释放分配的内存,以避免内存泄漏的发生。动态分配的内存在不需要时要及时释放,以提高程序的效率和性能。
本文来自极简博客,作者:樱花树下,转载请注明原文链接:C 内存的存储方案与动态分配new的讲解