动态内存分配函数

一、静态存储分配与动态存储分配:
(1)静态存储分配
通常定义变量(或对象),编译器在编译时都可以根据该变量(或对象)的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间。这种内存分配称为静态存储分配;
(2)动态存储分配
有些操作对象只在程序运行时才能确定,这样编译时就无法为他们预定存储空间,只能在程序运行时,系统根据运行时的要求进行内存分配,这种方法称为动态存储分配。所有动态存储分配都在堆区中进行

二、动态内存分配函数

1、malloc函数

void *malloc(unsigned int size);
//在内存的动态分配区域中分配一个长度为size的连续空间//堆区

(1)返回值:通用类型(void* 类型可以通过类型转换强制转换为任何其它类型的指针)
分配成功,返回一个指向分配起始地址的指针;
分配失败,返回NULL
(2)注意:
①使用malloc进行动态内存分配后应判断指针是否为空,即是否分配成功;
②申请的内存不会进行初始化,为随机值;
③使用完毕以后必须手动释放内存空间,否则会造成内存泄露
(3)malloc实际分配的内存会大于我们需要的size。主要由两方面因素决定:
1) 字节对齐 : 会对齐到机器最受限的类型(具体的实现因机器而异)。

2)“块头部信息”: 每个空闲块都有“头部”控制信息——结构体(32位),其中包含一个指向链表中下一个块的指针、当前块的大小和一个指向本身的指针。为了简化块对齐,所有块的大小都必须是头部大小的整数倍,且头部已正确对齐。

typedef struct _CrtMemBlockHeader
{
        struct _CrtMemBlockHeader * pBlockHeaderNext;
        struct _CrtMemBlockHeader * pBlockHeaderPrev;
        char *                      szFileName;
        int                         nLine;
        size_t                      nDataSize;//开辟空间大小
        int                         nBlockUse;
        long                        lRequest;
        unsigned char               gap[nNoMansLandSize];
} _CrtMemBlockHeader;
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值