C++的内存分配涉及栈、堆和静态存储区,每种分配方式有其独特的特点。以下是对它们的详细描述,包括分配方法、步骤和相应的示例源代码。
分配方法: 栈上的内存是自动分配和释放的,由编译器管理。
步骤: 局部变量和函数调用信息存储在栈上,栈指针自动上下移动。
#include <iostream>
void stackExample() {
int stackVar = 10; // 在栈上分配变量
std::cout << "Stack Variable: " << stackVar << std::endl;
// stackVar 在函数结束时自动销毁
}
int main() {
stackExample();
return 0;
}
分配方法: 堆上的内存由程序员手动分配和释放,使用 new
和 delete
。
步骤: 使用 new
在堆上分配内存,使用 delete
释放内存。
#include <iostream>
int main() {
int* heapVar = new int(20); // 在堆上分配变量
std::cout << "Heap Variable: " << *heapVar << std::endl;
// 需要手动释放堆上的内存
delete heapVar;
return 0;
}
分配方法: 静态变量在程序运行前分配,程序结束时释放。
步骤: 静态变量和全局变量存储在静态存储区,具有整个程序的生命周期。
#include <iostream>
int staticVar = 30; // 静态变量在静态存储区
int main() {
std::cout << "Static Variable: " << staticVar << std::endl;
return 0;
}
这三个示例清晰地演示了栈、堆和静态存储区的内存分配方式,以及相应的使用步骤。