专栏首页C语言入门到精通基础知识 | 每日一面(54)

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

古代的剑客们与

对手相逢时,无

论对手多么强大,

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

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

小林:多数 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() 分配的内存。

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

——图灵

本文分享自微信公众号 - C语言入门到精通(gh_780327809188),作者:闫小林

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言最大难点揭秘~!

    本文将带您了解一些良好的和内存相关的编码实践,以将内存错误保持在控制范围内。内存错误是 C 和 C++ 编程的祸根:它们很普遍,认识其严重性已有二十多年,但始...

    C语言入门到精通
  • 基础知识 | 每日一练(80)

    士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ...

    C语言入门到精通
  • C语言内存管理

    (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

    C语言入门到精通
  • Autodesk Navisworks 2018 安装教程。

    Autodesk Navisworks软件能够将AutoCAD和Revit®系列等应用创建的设计数据,与来自其它设计工具的几何图形和信息相结合,将其作为整体的三...

    课代表
  • JAVA_OPTS设置 转

    JVM:JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k"

    wuweixiang
  • JAVA_OPTS

    JVM:JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k"

    业余草
  • MapReduce工作笔记——Hadoop shell 常用文件操作命令

    列出当前目录下的文件以及文件夹,类似于UNIX/Linux 中的ls, 但是hadoop 中没有ll方法。 使用方法:

    莫斯
  • C++解析url地址成为prot://host:port/path?query[param]

    xiny120
  • 2 分钟搞定 3 个现代 CSS 特性

    Clip Paths 能把元素元素“裁剪”成特定形状,使用 CSS 提供的 polygon、circle、ellipse 等这些函数实现。举个例子:

    Javanx
  • 成都金牛区联合腾讯教育打造多元“抗疫”方案 探索在线教学新模式

    ? 为防控肺炎疫情,做好延期开学期间“停课不停学”的工作,按照“区域统筹、全学科覆盖、精选教育资源、创新在线教学方式”的总体思路,成都市金牛区教育局联合腾讯教...

    鹅老师

扫码关注云+社区

领取腾讯云代金券