• C语言 关于内存动态分配问题


    全局变量:分配到 内存的静态区。
    局部变量(非静态):分配到 内存的动态区。在存储区中称为栈(stack)
    临时数据(C允许内存动态分配区域):存放在自由空间区,称为堆区(heap)
    
    内存动态分配 得益于四个库函数实现 (malloc calloc free realloc)
    调用库函数 <stdlib.h>
    void * 不指向任何数据,只提供地址。如未成功执行(内存空间不足),则返回空指针
    
    1 malloc函数  // 动态存储区
    void *malloc(unsigned int size)
    作用:内存的动态区域 分配长度为size 的连续空间。
    返回值 是分配区域的第一个字节地址,分配区域的开头为止。
    
    maclloc(100)//分配100字节的临时分配域,函数值为第一个字节地址。
    ps:貌似 是给 局部变量/临时数据 分配内存空间的?????
    
    
    2 calloc函数  // 动态存储区
    void *calloc(unsigned n,unsigned size)
    作用:内存动态存储区中分配长度为size的连续空间,这个空间比较大,足够存个数组。
    
    p = calloc(504)//开辟50*4个自己的临时分配域,把起始地址赋给指针变量p
    ps:貌似 是给 局部变量/临时数据 分配内存空间 但是比较大额的?????
    
    3 free函数
    void free(void *p)  
    作用:释放指针变量p所指向的动态空间,使者部分空间能够重用,注意是空间,没说“指针“
    free(p)  //释放指针变量p 所指向的已分配的动态空间
    ps:释放指针变量的方法。
    
    4 realloc函数
    void *relloc(void *p,unsigned int size)
    如果通过mollie函数或是calloc 获取动态空间 想改变其大小,可以用recalloc函数重新分配。
    realloc(p,50)  //重置指针变量p的动态存储空间为50字节。
    ps:重置已经分配的指针变量的空间。
    
    小结:四个库函数 
    1/2 在动态存储区内 给变量分配存储空间(大小区别)
    3 释放指针变量的存储空间
    4 重置 指针变量的存储空间
  • 相关阅读:
    kb-07线段树-12--二分查找区间边界
    kb-07线段树--11--区间多重该值多种查询
    kb-07线段树--10--dfs序建树
    kb-09-线段树--区间合并比较繁
    kb-07线段树-08--区间开根
    kb-07-RMQ线段树--07(动态规划)
    kb-07线段树-06离散化(与第四题类似)
    kb-07线段树-05-区间整体修改查询;(水)
    poj-2486-Apple Tree
    mnist的数据预处理
  • 原文地址:https://www.cnblogs.com/ly1973/p/5956978.html
Copyright © 2020-2023  润新知