栈内存由编译器自动管理,函数调用时压入、返回时弹出,用于存放局部变量等,分配释放极快但大小受限;堆内存需手动管理,用于运行时动态数据,易引发内存泄漏或崩溃;现代C++推荐优先使用栈和RAII智能指针替代裸new/delete。
栈空间用于存放局部变量、函数参数、返回地址等,生命周期与作用域严格绑定。int a = 10;、std::string s = "hello"; 这类定义在函数内部的变量,默认都在栈上分配。
关键点:
rsp 或 esp)stack overflow
int arr[n];(n 非 const)在标准 C++ 中是非法的(除非用 VLAs 扩展,但非标准且危险)int x; 不等于 0
new / delete 或 malloc / free
堆用于运行时不确定大小或需跨函数存活的数据,比如大数组、对象、容器内部缓冲区。典型写法:
int* p = new int[1000000]; // 分配 100 万个 int // ... 使用 p ... delete[] p; // 必须用 delete[],否则未定义行为
常见陷阱:
new 和 delete 必须配对;new[] 和 delete[] 必须配对 —— 混用会导致内存损坏或崩溃
delete → 内存泄漏;重复 delete → 未定义行为(常见 crash)malloc 返回 void*,不调用构造函数;new 会调用构造函数,且可被重载除了栈和堆,C++ 程序实际还有几个固定区域:
立即学习“C++免费学习笔记(深入)”;
static 变量、全局变量(如 int g_val = 42;),程序启动时分配,结束时释放,零初始化const 全局变量(如 "hello world"),只读,试图修改会触发 segmentation fault
static int buf[1024];),加载时不占磁盘空间,运行时清零直接用 new/delete 容易出错,标准库提供了更安全的替代方案:
std::vector 替代 new int[n]:自动管理堆内存,异常安全,支持移动语义std::unique_ptr 管理单个堆对象:auto ptr = std::make_unique(arg1, arg2); // 构造即拥有 // 函数退出时自动 delete,无需手动干预
std::shared_ptr 管理共享所有权,但注意循环引用问题(可用 std::weak_ptr 打破)真正需要区分堆/栈的地方,往往出现在性能敏感路径(如避免 vector 频繁扩容)、嵌入式资源受限环境,或调试内存错误(valgrind 报告的 invalid read/write 位置能直接对应到分配方式)。
# linux
# windows
# 栈
# ai
# c++
# win
# 区别
# 作用域
# overflow
# 标准库
# red
# Static
# String
# 常量
# 构造函数
# const
# 局部变量
# 全局变量
# 字符串
# int
# void
# 循环
# 指针
# 堆
# delete
# 对象
# 极快
# 几个
# 都在
# 出现在
# 这类
# 数据管理
# 弹出
# 不支持
# 不确定
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Mac如何彻底清理浏览器缓存?(Safari与Chrome)
Win10怎样卸载DockerDesktop_Win10卸载DockerDesktop步骤【步骤】
C++中引用和指针有什么区别?(代码说明)
如何用::实现工具类方法调用_php静态工具类设计技巧【技巧】
Win11如何设置系统语言_Win11系统语言切换教程【攻略】
Python装饰器复用技巧_通用能力解析【教程】
c# 在ASP.NET Core中管理和取消后台任务
Win11怎么关闭右下角弹窗_Win11拦截系统通知广告【设置】
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
C++友元类使用场景_C++类间协作设计方式讲解
Python多进程教程_multiprocessing模块实战
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
Win11屏幕亮度突然变暗怎么解决_自动变暗问题处理
Mac如何修复应用程序权限问题_Mac磁盘工具修复权限【教程】
Go 中的 := 运算符:类型推导机制与使用边界详解
Win11怎么连接蓝牙耳机_Win11蓝牙设备配对与连接教程【步骤】
Mac怎么查看活动监视器_理解Mac进程和资源占用【指南】
Win11怎么设置屏保时间_调整Win11屏幕保护等待时间【详解】
php本地部署支持nodejs吗_php与nodejs混合开发环境搭建教程【教程】
Win11怎么禁用键盘自带键盘_Win11笔记本禁用内置键盘方法【教程】
c++的static关键字有什么用 静态变量和静态函数的应用场景【教程】
Win11开机自检怎么关闭_跳过Win11开机磁盘扫描修复方法【技巧】
MAC怎么解压RAR格式文件_MAC第三方解压工具安装与压缩包管理【教程】
Win11怎么关闭自动维护 Win11禁用系统自动维护功能【优化】
Windows10电脑怎么设置文件权限_Win10安全选项卡所有者修改
Win11如何开启telnet服务 Win11启用Telnet客户端【步骤】
手机php怎么转mp4_手机端php文件转mp4app推荐【指南】
Win11怎么关闭系统提示音_Windows11声音方案设为无声教程
Win11怎么设置默认浏览器Chrome_Windows11修改默认网页打开方式
如何将文本文件中的竖排字符串转换为横排字符串
如何在Golang中实现服务熔断与限流_Golang微服务容错与流控方法
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
Win10怎样设置多显示器_Win10多显示器扩展设置【攻略】
mac怎么打开终端_MAC终端Terminal使用入门与常用命令【教程】
如何使用正则表达式批量替换重复的 *- 模式为固定字符串
Windows蓝屏错误0x0000001E怎么修复_KMODEEXCEPTIONNOTHANDLED排查
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Windows 11如何开启文件夹加密(EFS)_Windows 11文件属性中加密内容以保护数据
php下载安装后swoole扩展怎么安装_异步框架支持【汇总】
Windows10电脑怎么连接蓝牙设备_Win10蓝牙配对失败解决方法
Win10如何卸载微软拼音输入法 Win10只保留一个输入法【教程】
C++如何解析JSON数据?(nlohmann/json库示例)
Win11怎么关闭贴靠布局_Win11禁用窗口最大化时的布局菜单
如何在 Go 中高效缓存与分发网络视频流
Win11怎么设置系统还原_Windows11系统属性保护设置
Windows10系统怎么查看显卡驱动_Win10设备管理器驱动更新
Python函数缓存机制_lru_cache解析【指导】
Python对象生命周期管理_创建销毁解析【教程】
Linux怎么设置磁盘配额_Linux系统Quota安装与用户空间限制【教程】
Win10系统怎么查看网络连接状态_Windows10网络和共享中心
2026-01-04
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。