zoukankan      html  css  js  c++  java
  • C内存分配

    今天就很简单地写下C的内存分配问题

    理想化的情况下,C的内存分配有3部分

    分别是静态变量的内存,自动变量的内存,动态分配的内存

    静态变量内存

    在程序编译的时候知道的内存数量,这些数据在整个程序运行的时间都是可用的,lifetime是整个运行周期

    自动变量的内存

    进入代码块的变量定义的地方,为变量分配内存,代码块结束的时候,自动把内存释放了。lifetime是代码块内部

    动态分配的内存

    这个内存是需要调用函数分配的

    分配函数是malloc(),释放分配的函数是free()

    malloc

    int *p;
    p=(int *)malloc(n*sizeof(int));

    参数是个数量,表示字节的大小。

    返回值是地址

    可以类比数组,返回值是数组第一个元素,p[1] 表示第二个元素

    但是malloc 返回的是void类型,需要强制转换成指针,所以需要强制转化类型(int *);

    free

    用来释放malloc分配的内存,这个很重要

    不释放内存会造成内存溢出,也就是内存用完了。

    举个栗子,

    int x[2000];
    for(int i=0;i<1000;i++){
        int *p=(int *)malloc(n*sizeof(int));
      //free(p) 若注释掉这句
    
    }

    上面的代码每一次循环都没有把内存释放掉,会最终造成内存溢出的。

    上面是我对C内存分配很肤浅的认识,有错误之处,多多指教  EOF

  • 相关阅读:
    数据结构--线性表和链表的基础知识
    OC基础--字符串
    iOS开发知识梳理博文集
    OC基础--数据类型与表达式
    数据结构概述
    数据结构--栈和队列基础知识
    NodeJS Get/Post 参数获取
    NodeJS + express 添加HTTPS支持
    NodeJS 获取系统时间 并格式化输出
    Node.Js + Express 搭建服务器
  • 原文地址:https://www.cnblogs.com/wz0107/p/5346461.html
Copyright © 2011-2022 走看看