(1)malloc/free 函数

malloc()函数和free()函数是在堆中申请或释放内存空间的,其函数声明如下:

#include

extern void* malloc(size_t _size);

extern void free(void* _ptr);

malloc()函数在堆中申请分配一个长度为_size字节的连续空间,若申请成功,则返回一个指向该区域的首地址的指针,若申请失败则返回NULL指针,且在使用完后,需要人为调用free()释放掉。

(2)realloc()函数

realloc()函数是用来在堆中更改已经分配的内存空间的,其函数声明如下:

#include

extern void* realloc(void* ptr,size_t size);

函数的第一个参数ptr为原堆指针地址,第二个参数size为新的内存大小,函数调用成功则返回新堆地址,否则返回

NULL,但此时原堆指针仍可用。

如果调用该函数的目的只是减小原堆大小,realloc(函数将)仅仅修改索引信息,原堆指针将不变,但减少部分的内存空间会交给系统自动回收,不可再用。但如果目的是扩大原堆大小,将可能有以下几种情况之一发生:

如果当前内存段后面拥有足够需要的内存,则直接扩展原堆大小,原堆的指针不变。

如果当前内存段后面的内存大小不够,那么将 在堆中寻找第一个满足条件的内存块,并将原堆数据复制到新堆中,释放掉原堆指针(系统自动释放,切记不可人为再次释放),并返回新堆地址。

申请失败,返回NULL,但原堆指针仍可用。

(3)calloc()函数

calloc()函数是malloc()的简单封装,它相对于malloc()函数的主要优点是在动态分配内存后,紧接着把这块内存初始化为0(这很重要,这时候内存才是真正分配成功)。

(4)alloca()函数

alloca()函数是在栈中,而不是堆中,分配内存空间的,因此使用完后,系统会自动释放掉该空间,不需要人为再次释放。同malloc()一样,分配成功返回对应指针,失败则返回NULL。

hyperv动态内存Linux,Linux 之动态分配内存方式相关推荐

  1. C语言动态数组(malloc()函数动态分配内存)

    malloc()函数简介 头文件:<stdlib.h> 或者 <malloc.h>. 函数声明: void *malloc( int size ); 用法: (分配类型 * ) ...

  2. 静态分配内存和动态分配内存

    首先,在使用动态分配内存技术前,必须明白自己在做什么,这样做与其它的方法有什么不同,特别是会产生哪些负面影响,天下没有免费的午餐.动态分配内存与静态分配内存的区别: 1) 静态内存分配是在编译时完成的 ...

  3. C++ | 动态分配内存 new和malloc的区别

    01 静态分配内存 通常声明变量都采用"静态分配"的方式,也就是所有变量声明必须在编译阶段完成. 02 动态分配内存--new和delete 动态分配内存是指程序在运行时才提出分配 ...

  4. 【Linux 内核 内存管理】Linux 内核内存布局 ③ ( Linux 内核 动态分配内存 系统接口函数 | 统计输出 vmalloc 分配的内存 )

    文章目录 一.Linux 内核 动态分配内存 系统接口函数 二.统计输出 vmalloc 分配的内存 一.Linux 内核 动态分配内存 系统接口函数 Linux 内核 " 动态分配内存 & ...

  5. linux性能优化实战-内存性能指标

    转自:https://blog.csdn.net/san_77227487/article/details/87938546 https://blog.csdn.net/zxcc1314/articl ...

  6. Linux内核初始化阶段内存管理的几种阶段

    本系列旨在讲述从引导到完全建立内存管理体系过程中,内核对内存管理所经历的几种状态.阅读本系列前,建议先阅读memblock的相关文章. 一些讲在前面的话 在很久很久以前,linux内核还是支持直接从磁 ...

  7. Linux 进程地址空间 进程内存布局

    一 进程空间分布概述     对于一个进程,其空间分布如下图所示: 程序段(Text):程序代码在内存中的映射,存放函数体的二进制代码. 初始化过的数据(Data):在程序运行初已经对变量进行初始化的 ...

  8. 深入理解Linux内核01:内存寻址

    目录 1. 内存地址 1.1 三种地址 1.1.1 逻辑地址(logical address) 1.1.2 线性地址(linear address) 1.1.3 物理地址(physical addre ...

  9. Linux下的进程内存结构

    Linux下的进程内存结构 虚拟内存管理 Linux操作系统采用虚拟内存管理技术,使得每个进程都有独立的地址空间,该地址空间大小为4GB的线性虚拟空间,用户所看到和接触到的都是该虚拟地址,无法看到实际 ...

最新文章

  1. Numpy生成二项分布随机数
  2. SAP BASIS顾问认知的一些误区
  3. MySQL授权用户及密码恢复设置
  4. 计算机双行文本一般应用在什么地方,全国计算机二级MS office操作试题及答案
  5. 伟大骡子的一生和性能测试
  6. 第 6 章 存储 - 039 - Data Volume 之 bind mount
  7. 英文语音识别_英文语音识别软件_英文语音识别翻译 - 云+社区 - 腾讯云
  8. linux emule 编译 wx-config --libs,Linux下的wxWidgets静态编译实现方法
  9. 机器学习之朴素贝叶斯分类算法
  10. Python Counter函数
  11. ubuntu64 使用gcc -m32编译成32bit程序
  12. easyexcel结合zip 导出压缩文件(包含多个excel)
  13. YUV和RGB的区别(以及YUV444 YUV422 YUV411 YUV420的介绍)
  14. 布局文件之间含有相同的id的控件
  15. 江南Style之---西塘
  16. java英雄联盟战斗力题目,Java 查询英雄联盟玩家战绩
  17. UML类图简介及类与类之间的关系
  18. SpringSecurity详细介绍RememberMe功能
  19. 基于用户乘车行为大数据的客流分析及预测模型
  20. 阅读使人进步《我的书单》

热门文章

  1. 基于Tensorflow + Opencv 实现CNN自定义图像分类
  2. 架构的变迁,从分层架构先聊起
  3. 华为云专家私房课:视频传输技术选型的三大法宝
  4. 【华为云技术分享】物体检测yolo3算法 学习笔记2
  5. 使用Keil5构建GD32450i-EVAL工程
  6. 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(1)
  7. 免费试用 | 多模 NoSQL 服务GeminiDB for Cassandra 全球首发
  8. TCGA肿瘤基因数据的访问(二)
  9. 《跟唐老师学习云网络》 - 什么是VLAN和VXLAN
  10. MATLAB的full,matlab中sparse和full函数的使用