• malloc,calloc,realloc,alloc


    三个函数的申明分别是:
    void* realloc(void* ptr, unsigned newsize);
    void* malloc(unsigned size);
    void* calloc(size_t numElements, size_t sizeOfElement);
    都在stdlib.h函数库内

    它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL

    1.  malloc用于申请一段新的地址,参数size为需要内存空间的长度

    如:
      char* p;
      p=(char*)malloc(20);

    2. calloc与malloc相似,calloc()函数有两个参数,分别为元素的数目和每个元素的大小

    如:
      char* p;
      p=(char*)calloc(20,sizeof(char));
      这个例子与上一个效果相同

    3. realloc是给一个已经分配了地址的指针重新分配空间,参数p为原有的空间地址,另一个参数是重新申请的地址长度,这里原始内存中的数据还是保持不变的。

    • realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得增加的字节
    • 如果原先的内存大小后面还有足够的空闲空间用来分配,加上原来的空间大小= newsize。那么就ok。得到的是一块连续的内存
    • 如果原先的内存大小后面没有足够的空闲空间用来分配,那么从堆中另外找一块newsize大小的内存。
      并把原来大小内存空间中的内容复制到newsize中。返回新的mem_address指针。(数据被移动了)。
      老块被放回堆上。

    如:
      char* p;
      p=(char*)realloc(p,sizeof(char)*40);

    注意,这里的空间长度都是以字节为单位。

    4.alloc是向栈申请内存,因此无需释放(以后了解后详细补充)

     ***

    • C语言的标准内存分配函数:malloc,calloc,realloc,free等。
    • malloc与calloc的区别为1块与n块的区别:
    • malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为“size”字节的连续区域,返回该区域的首地址。
    • calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为“size”字节的连续区域,返回首地址。
    • realloc调用形式为(类型*)realloc(*ptr,size):将ptr内存大小变化到size。



    free的调用形式为free(void*ptr):释放ptr所指向的一块内存空间。
    C++中为new/delete函数。

  • 相关阅读:
    渐变
    阴影
    html+css
    background用法
    语言特点
    h5c3介绍
    js的组成
    第九章 查找文件或者命令
    第八章 查看文件内容命令
    第七章 文件管理之基础命令
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5494142.html
Copyright © 2020-2023  润新知