首页 > 系统相关 >动态内存分配

动态内存分配

时间:2023-06-14 10:00:58浏览次数:53  
标签:malloc 动态内存 内存空间 内存 数组 空间 柔性 分配

栈区:

局部变量  函数的形式参数


堆区:

动态内存分配  malloc,free,calloc,realloc


静态区:

全局变量,静态变量,statint


#include <stdlib.h>      malloc,free的头文件

返回类型void*

向内存申请空间

malloc 开辟空间 

malloc(空间大小值  *  sizeof())


当动态申请的空间不再使用的时候

  就应当还给操作系统

 free(p); 

free释放空间


释放后应把p置为NULL(空指针),防止内存空间非法访问


calloc

向内存申请空间,并把空间的每个字节初始化0

calloc(空间大小值, sizeof(类型)

函数返回类型void*


realloc使用注意事项:

1.如果p指向的空间之后有足够的内存空间可以追加,这直接追加,后返回p;

2.如果p指向的空间之后没有足够的内存空间可以追加,则realloc函数就重新找到一个新的内存区域开辟一块满足需求的空间,并且把原来内存中的数据拷贝回来,释放原来的内存空间。

3.得用一个新的变量来接收realloc函数的返回值。


柔性数组

未知大小的-柔性数组成员-数组的大小是可以调整的。

特点:

1.结构中的柔性数组成员前面必须至少一个其他成员。

2.sizeof返回的这种结构大小不包括柔性数组的内存。

3.包含柔性数组成员结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。  


好处:

1.方便内存释放

2.有利于访问速度


标签:malloc,动态内存,内存空间,内存,数组,空间,柔性,分配
From: https://blog.51cto.com/u_15839001/6475633

相关文章

  • C++面试八股文:如何在堆上和栈上分配一块内存?
    C++面试八股文:如何在堆上和栈上分配一块内存?某日二师兄参加XXX科技公司的C++工程师开发岗位6面:面试官:如何在堆上申请一块内存?二师兄:常用的方法有malloc,new等。面试官:两者有什么区别?二师兄:malloc是向操作系统申请一块内存,这块内存没有经过初始化,通常需要使用memset手......
  • 关于U8权限分配:记录级、字段级
    1.记录级,针对单一记录,如客户档案,可授权某一用户查看那些记录,比如表单中的行。如下面仓库则是仓库那些仓库允许谁查看,那些不允许谁醒看操作,用户:则是那些用户对应用户创建那些表单记录有权,那些记录没权。 2.字段级,针对业务对象的字段进行控制,如采购订单中的单价,金额字段。 3......
  • vm - 网卡故障-没有分配ip - mv ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop s
    执行指令sudodhclientens33即可恢复红色部分,需要查看自己的机器,改为后缀即可cd/etc/sysconfig/network-scripts 需要等待一会才能刷新,使用 servicenetworkrestart 刷新会失败......
  • 侯捷老师-内存管理和内存分配器
    目录链接:https://www.youtube.com/watch?v=uQ3wKWGmtk0&list=PLRTJhCIMo8HPlzVfZ8uxs6SGSSAtKXQ6Q所有的内存分配最终都会调用mallocglibc就是直接用的DLMalloc调用层次:c++程序员=>标准库容器std::allocator=>标准c++的operatornew()=>CRT的malloc和free=>操作......
  • 对象与静态内存、栈内存、动态内存
    静态内存:保存局部static对象、类static数据成员、函数之外定义的变量。程序结束时销毁。栈内存:定义在函数内的非static对象。在其定义的程序块运行时存在,程序块运行结束即销毁。动态内存又叫堆:每个程序拥有的一个内存池,存储程序运行时动态分配的对象。销毁需要在代码中手动销......
  • C++面试八股文:如何在堆上和栈上分配一块内存?
    某日二师兄参加XXX科技公司的C++工程师开发岗位6面:面试官:如何在堆上申请一块内存?二师兄:常用的方法有malloc,new等。面试官:两者有什么区别?二师兄:malloc是向操作系统申请一块内存,这块内存没有经过初始化,通常需要使用memset手动初始化。而new一般伴随三个动作,向操作系统申请一......
  • linux 内存管理 ------ malloc 的内存分配
     低于128K的内存分配采用具有内存池缓存机制的brk方式,可以减少缺页中断、系统调用的次数。高于128K时采用匿名内存映射区的mmap方式,避免产生太大的内存碎片 如果分配后的虚拟内存没有被访问的话,虚拟内存是不会映射到物理内存的,这样就不会占用物理内存了。只有在访问已分配......
  • 关于int**在malloc为二维数组分配空间时候的作用见解
    关于int**在用malloc函数为二维数组分配空间时候int**  二级指针类型二维数组的数组名为行指针,写成 arr =(char**)malloc(n*sizeof(char))时,arr并不是二维数组的数组名,而是指针数组的数组名,指针数组的数组名是二级指针,所以可以用int**把malloc分配的空间强制转换成二级指针类......
  • 【C语言】动态内存管理函数的 深度解析 #是不是对数组不能变大变小而烦恼呢?学会动态内
    前言动态内存管理函数可以说很好用,但是有些小危险。所谓动态内存分配,就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求......
  • 一文读懂责任分配矩阵,解决你80%的项目难题
    成功的项目管理取决于整个团队对角色和职责的理解,使用责任分配矩阵分配和定义角色是使项目保持在正轨并为成功做好准备的好方法。如果设计得当,责任分配矩阵能够促进项目的成功交付。一、什么是责任分配矩阵责任分配(RACI)矩阵是项目管理工具,用于定义和跟踪团队成员在项目中的角色......