面试题答案
一键面试栈内存区域变量生命周期特点
- 栈变量由系统自动分配和释放。当进入变量所在的代码块时,系统自动为栈变量分配内存;当代码块结束时,系统自动回收这些变量占用的栈内存。
- 栈变量的生命周期与定义它的代码块的生命周期紧密相关,具有局部性,其作用域仅限于定义它的代码块内。
堆内存区域变量生命周期特点
- 堆变量由程序员手动分配和释放。使用
new
关键字分配内存,使用delete
关键字释放内存。 - 堆变量的生命周期从
new
分配内存开始,直到delete
释放内存结束。如果不手动释放,可能会导致内存泄漏。
代码示例
#include <iostream>
void stackVariableExample() {
// 定义栈变量
int stackVar = 10;
std::cout << "栈变量 stackVar 的值: " << stackVar << std::endl;
} // 代码块结束,stackVar 自动释放
void heapVariableExample() {
// 定义堆变量
int* heapVar = new int(20);
std::cout << "堆变量 *heapVar 的值: " << *heapVar << std::endl;
// 手动释放堆变量
delete heapVar;
}
int main() {
stackVariableExample();
heapVariableExample();
return 0;
}
在上述代码中,stackVariableExample
函数内的stackVar
是栈变量,在函数结束时自动释放。heapVariableExample
函数内的heapVar
是堆变量,需要手动使用delete
释放,否则会造成内存泄漏。