实际获得的动态分配内存的大小怎么确定
我先问你个问题:指针中是没有所在内存块大小的信息的,那么 free 怎么才能知道要释放的内存块有多大呢?于是,对于大多数内存分配器,malloc 申请的实际内存比你要求的空间要大几个字节,里面存储了额外的数据来记录这块内存有多大,一般就是直接存在指针左边。free 的时候,就会去读取指针地址减去一个常数之后的那块内存,来获取内存块的信息。因此如果你 free 一个不指向内存块开始处的指针,free 的时候就会把其他的数据错误解释成内存块的信息,(大概率)导致程序崩溃。当然现代的内存分配器对于不同大小的内存申请,会采用不同的分配策略,但无论策略如何,去 free 一个不是 malloc 来的指针,都是非常危险的举动。
参考资料
分类:
C/C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2019-07-23 ubuntu nvidia驱动安装教程
2019-07-23 conda虚拟环境 相关操作
2019-07-23 安装conda后取消命令行前出现的base,取消每次启动自动激活conda的基础环境, 使用ubuntu 自带的Python环境