c++-面试题_堆和栈的区别

本文详细介绍了C++中的内存管理,主要对比了堆内存和栈内存的分配方式、大小限制、申请后的系统响应及分配效率。栈内存用于存储局部变量、临时变量等,由编译器自动管理;堆内存则需要程序员手动申请和释放,具有更大的灵活性但效率较低。
摘要由CSDN通过智能技术生成

C++的内存分配可以分为3种,静态内存、栈内存、堆内存。
一、静态内存:存储静态变量和全局变量
1、静态变量(包括局部静态变量、类的静态数据成员、全局静态变量)在静态内存中分配内存,当整个程序运行完毕之后才销毁变量,释放内存。
2、初始化时间:
局部静态变量:就是定义在函数或者语句块中的局部静态变量,在第一次使用之前分配内存。
非局部静态变量:在main函数之前的静态初始化过程中分配内存。
3、类静态变量初始化方式
1)静态成员函数(与非静态成员函数一样)既可以在类内初始化也可以在类外初始化。因为静态成员不属于任何一个类,所以不包含this指针,所以静态成员函数中不能使用this指针,也不能使用类的非静态数据成员,即只能使用静态数据成员。
2)静态数据成员在类内声名,类外定义。
3)常量静态数据成员可以在类内定义。如:static constexpr int num=30;

二、说一说栈和堆的区别
1、内存分配方式不同
1)栈内存:
存储局部变量、临时变量、函数参数等,由编译器自动分配和回收内存,

2)堆内存:
由程序员手动分配和回收内存,使用new运算符手动申请内存,必须使用delete手动释放内存

2、申请大小限制

栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存区域。栈通常是有大小限制的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数)ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值