#include<iostream>
using namespace std;
int main()
{char *p;if((p=(char *)malloc(0))==NULL)puts("got a null pointer");elseputs("got a valid pointer");
}

答案:got a valid pointer

首先: 
    在标准的malloc实现中,并不检查输入值的大小,而是将输入值做对齐操作后直接从堆上分配空间。 
其次: 
    不论输入值的大小为多少,在malloc的内部最小的内存分配大小是一个定值(一般是8B),因为malloc需要用这部分空间来维护堆上的内存块链表。所以当用户申请一块0B的空间时,malloc实际分配的空间是8B,如果用户申请的空间是X,则malloc实际分配的空间是(对齐(X)   +   8)。这也是为什么malloc分配的空间千万不能越界使用的原因:堆的内部链表结构将被破坏。

另外对于new和delete malloc和free这样的内存分配与释放函数:到底delete和free是怎么知道要释放掉多少内存的呢?

其实在new和malloc内存分配成功时,系统出除了返回一个指向这块内存的指针外,还会获得一块用于记录此处分配的内存大小的内存块:

malloc的内存分配之 malloc(0)的内存分配情况相关推荐

  1. 分配大小为0的内存和0值进行比较

  2. 安全管家安卓_内存优化管家v1.0下载-内存优化管家app最新版下载

    内存优化管家是一款安卓手机多功能清理工具,包含了文件垃圾.缓存垃圾.广告垃圾和内存垃圾等分类清理功能,使用方法简单,一键扫描手机,即可进行不同类型的垃圾划分, 用户可以根据需求进行筛选清理,除此之外, ...

  3. 在malloc函数中为什么常用sizeof来设定内存分配的大小?

    在malloc函数中为什么常用sizeof来设定内存分配的大小? 例子:为40个整数变量分配内存并赋值,然后系统在收回这些内存. #include<stdlib.h> #include&l ...

  4. linux c语言 glibc 错误 munmap,Linux内存分配小结--malloc、brk、mmap

    Linux的虚拟内存管理有几个关键概念: 1.每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址: 2.虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟空间地址)与物理地址进行 ...

  5. 内存分配函数 malloc、realloc、calloc

    C 语言主要提供 malloc.realloc.calloc.alloca 与 aligned_alloc 等内存分配函数来实现对内存的分配功能. 1) malloc 函数原型如下: void * m ...

  6. 内存分配(malloc()和free())

    C语言的一个特性是接近底层,对于硬件的控制能力比其他高级动态语言要强.同时,C语言赋予程序员更大的自由度,更信任程序员.在内存的分配与释放上,我们知道非静态变量(块作用域,无链接,自动生存期)在程序进 ...

  7. 探究操作系统的内存分配(malloc)对齐策略

    问题: 我们在写程序的时候经常发现程序使用的内存往往比我们申请的多,为了优化程序的内存占用,搅尽脑汁想要优化内存占用,可是发现自己的代码也无从优化了,怎么办?现在我们把我们的焦点放到malloc上,毕 ...

  8. c语言malloc引用类型作参数,c语言中动态内存分配malloc只在堆中分配一片内存.doc...

    c语言中动态内存分配malloc只在堆中分配一片内存 .C语言中动态内存分配(malloc)只在堆中分配一片内存,返回一个void指针(分配失败则返回0),并没有创建一个对象.使用时需要强制转换成恰当 ...

  9. 动态内存分配(malloc函数)

    动态内存分配 原型 extern void*malloc(unsigned int num_bytes); 头文件 #include<stdlib.h> 功能 分配长度为num_bytes ...

  10. 动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间

    动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间 1. 动态内存申请的底层系统调用 动态内存申请函数根据申请的内存大小选择不同的系统调用,小于128K选择brk系 ...

最新文章

  1. HDFS伪分布式环境搭建
  2. python的scramy架构_Scrapy的架构初探
  3. 微信浏览器禁止页面下拉查看网址
  4. mysql的字符型系统数据类型主要包括_MySQL的数据类型主要包括哪些
  5. python如何进阶提升_Python序列操作之进阶篇
  6. python正则表达式初识(七)_Python正则表达式初识(二)
  7. 编写一个汇编语言程序,完成以下要求。从BUF单元处定义有10个带符号字数据:-1,3,24,94,62,72,55,0,-48,99,试找出他们中的最大值和平均值,并以此分别存放至该数据区的后两个单元
  8. python中ndim是什么_Numpy中ndim、shape、dtype、astype的用法详解
  9. 微信小游戏踩坑记录(二)
  10. 输入任意两个两位的自然数,输出它们完整的乘法竖式。
  11. F5-yumnfsftp
  12. HDU 2186--
  13. 双主动桥隔离双向DC-DC变换器(三) 控制策略
  14. 交换机配置常用的命令
  15. Ubuntu20.04设置WiFi热点
  16. 赵小楼《天道》《遥远的救世主》深度解析(144)问题本身就是答案。需要强调的东西不是本来的那个东西。
  17. 摄像头测试程序无线摄像头测试程序
  18. python拼音数字输出接口_python: 拼音处理模块
  19. python教材答案编写函数求成绩平均数_学好Python例题之求成绩平均分
  20. android 启动页主题_如何使用主题和启动器个性化您的Android手机

热门文章

  1. Log4j的快速入门
  2. Zookeeper_zkClientAPI讲解
  3. ThreadLocal - Java多线程编程
  4. Android从url不产生cookie,如何从android.webkit.CookieManager获取所有cookie或cookie的URL
  5. bert模型中的[CLS]、[UNK]、[SEP]
  6. JAVA数据类型的转换及数据的原反补三码
  7. 俄罗斯“指尖旋风”席卷南京
  8. Python——如何搭建Python的环境
  9. jQuery Mobile和UI合并组新项目,这波能赢么?
  10. JSP常见的三个编译指令