前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础知识 | 每日一面(54)

基础知识 | 每日一面(54)

作者头像
小林C语言
发布2020-04-02 17:23:44
3980
发布2020-04-02 17:23:44
举报

古代的剑客们与

对手相逢时,无

论对手多么强大,

明知不敌,也要亮出自己的剑!

读者:我有个程序分配了大量的内存, 然后又释放了。但是从操作系统看, 内存的占用率却并没有回去。

小林:多数 malloc/free 的实现并不把释放的内存返回操作系统, 而是留着供同一程 序的后续 malloc() 使用。

读者:free() 怎么知道有多少字节需要释放?

小林:malloc/free 的实现会在分配的时候记下每一块的大小, 所以在释放的时候就 不必再考虑了。

读者:那么我能否查询 malloc 包, 可分配的最大块是多大?

小林:不幸的是, 没有标准的或可移植的办法。某些编译器提供了非标准的扩展。

读者:向 realloc() 的第一个参数传入空指针合法吗?

小林:ANSI C 批准了这种用法, 以及相关的 realloc(. . . , 0), 用于释放, 尽管一些早 期的实现不支持, 因此可能不完全可移植。向 realloc() 传入置空的指针可以更容 易地写出自开始的递增分配算法。

读者:calloc() 和 malloc() 有什么区别?利用 calloc 的零填充功能安 全吗?free() 可以释放 calloc() 分配的内存吗, 还是需要一个 cfree()?

小林:calloc(m, n) 本质上等价于 p = malloc(m * n); memset(p, 0, m * n); 填充的零是全零, 因此不能确保生成有用的空指针值或浮点零值。free() 可以安全地用来释放 calloc() 分配的内存。

有时候,正是那些意想不到之人,成就了无人能成之事。

——图灵

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档