zoukankan      html  css  js  c++  java
  • 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 重置 指针变量的存储空间
  • 相关阅读:
    Vue之登录基础交互
    Vue之Slot用法初探
    序言
    sqlserver下通用 行转列 函数(原创)
    A printf format reference page (cheat sheet)
    [PowerShell]HTML parsing -- get information from a website
    [Python]打印a..z的字符
    Takari Extensions for Apache Maven (TEAM)
    【转】LAMBDAFICATOR: Crossing the gap from imperative to functional programming through refactorings
    [转][Java]使用Spring配合Junit进行单元测试的总结
  • 原文地址:https://www.cnblogs.com/ly1973/p/5956978.html
Copyright © 2011-2022 走看看