当前位置: 首页 > news >正文

malloc(0)分配多少内存?(译文)

原文地址:http://prog21.dadgum.com/179.html

  在大多的系统中,这个C的小程序将会吸收全部空闲的内存。

while(1){
    malloc(0);
}

在我们聊malloc(0)之前,让我们看看malloc(1)这个更简单的情况。

   这有一个关于malloc的新的有趣的C程序问题:”用一个指针去动态的分配内存,我们能怎样决定它指向多少字节(byte)?“这个答案是令人沮丧的“你不能决定。”但是当你调用free在相同的指针,内存分配知道这个块(block)有多大,所以它存储在计算机某个地方。这个地方一般是相邻分配内存,以及分配器需要的任何其他实现特定的数据。

  在普遍的dlmalloc的实现中,在4~16字节的这个开销被添加到一个请求中,根据库怎样被预编译和是否指针是32或者64位。8字节对于64位系统是一个合理的猜测。

  更糟糕的事情是,一个最小的块能够被malloc返回。对齐是原因之一。如果有一个整型大小的空间被隐秘的向每个块中添加,那么它不会有意义对于分配一个比整型更小的块。但也有另一个原因:当一个块是空闲的时候,它会被某种方式追踪。或许它进入一个链表,或者进入一个树中,或者一些更有趣的。不管怎样,指针或者其他的数据让工作不得不去某个地方,而在刚刚释放的块中则是自由的选择。

  在dlmalloc中,一个64位系统中最小被允许分配的大小是32位。回到malloc(1)的问题,8字节的开销被添加到我们需要的单个字节中,并且总共一起的是比最小的32更小,所以我们的答案是:malloc(1)分配32字节。

  现在我们能够着手处理分配0字节的问题。它证明事实会有一个愚蠢的辩论,并且它还没有被解决,所以技术上分配0字节是特定于实现的行为。一面认为malloc(0)应该返回一个空指针并完成它。它执行,如果你不介意一个空的返回值服务双重责任。它也意味着“内存外”或者“你不需要任何内存。”

  更加普遍的形式是malloc(0)返回一个特别的指针。你不应该引用那个指针,因为它是概念上的指向0字节,从上文的探讨我们得知,至少dlmalloc在64位系统中将总是分配一个32字节的块,所以这个最后的答案:它需要32字节来满足你分配无内存的请求

转载于:https://www.cnblogs.com/Mayfly-nymph/p/9218884.html

相关文章:

  • MATLAB生成正弦波
  • SPOJ VLATTICE
  • Anaconda快速入门安装学习笔记
  • Java多线程基础
  • 剑指offer 面试46题
  • Django 在 view 中使用 Paginator分页插件
  • 前后端分离,get请求导出
  • SQL server数据库压缩空间
  • audio之点击图标切换音频播放状态以及替换当前图标
  • python_面向对象,类名称空间,对象名称空间,组合
  • 用position: fixed;做个遮罩,怎么能让后面的View禁止滑动
  • 利用h5来进行定位当前位置
  • 01-html和head介绍
  • Idea像eclipse一样把jar给导入到lib下面
  • BZOJ3112 [Zjoi2013]防守战线 【单纯形】
  • [LeetCode] Wiggle Sort
  • C语言笔记(第一章:C语言编程)
  • PV统计优化设计
  • React16时代,该用什么姿势写 React ?
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 搞机器学习要哪些技能
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 思否第一天
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #git 撤消对文件的更改
  • #Java第九次作业--输入输出流和文件操作
  • (12)Hive调优——count distinct去重优化
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (编译到47%失败)to be deleted
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)Thymeleaf用法——Thymeleaf简介
  • (一)WLAN定义和基本架构转
  • (一)基于IDEA的JAVA基础10
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (正则)提取页面里的img标签
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转载)深入super,看Python如何解决钻石继承难题
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .net访问oracle数据库性能问题
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET是什么
  • .NET中两种OCR方式对比
  • .NET中统一的存储过程调用方法(收藏)
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @拔赤:Web前端开发十日谈
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [20140403]查询是否产生日志
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)