C语言基础-- 内存存储

原创 2015年11月17日 19:36:52

存储区划分

-----------------------------------------

         对于任何一个内存其实都包括5个区域
      五个区:(内存地址从高到低依次为)
       1、栈区
              特点:由系统分配以及回收内存。 定义在函数体内分配的变量被分配在栈区
       2、堆区(重点)
             特点:由用户(开发人员或程序猿)申请分配和回收。 malloc
                 假如你一致开辟内存而不去回收,会导致系统内存越用越少,最终导致程序crash(崩溃)。
                  假如你一直没有回收,而且也没有崩溃,当你程序退出的时候,系统帮你回收
      3、静态区(全局区)
            特点:定义在函数体外的变量或者有static关键字修饰的变量
             程序运行过程中一直存在,直到程序退出时候由程序回收
      4、常量区
            特点:用来存放常量的内存区域: 例如12,64,567 占用
      5、代码区

     特点:把原代码转化成0101的二进制序列存放在代码区 编程CPU指令存放在代码区,函数名也在

--------------------------------------------------------------

     例1:
         int a = 8;
           for (int i = 0; i < 9; i++) {
         }
         printf("i = %d\n",i);

         出了函数作用域就会被回收


常量区: 占用内存是只读状态的,不能被修改

          //static所修饰的变量特点:1、只初始化一次 2、只有程序退出才释放 3没初始化值,默认为0 4、该变量存在内      存的静态区


--------------------------------------------------------------

堆内存分配函数

 malloc void *malloc(unsigned int size);

             malloc是函数的名字, malloc函数向系统申请分配四则个连续的内存空间(以字节为单位)

             函数返回值是void * 是一个指针类型,但不代表确切的指针类型,程序员根据自己的需求转化为所需要的类型


             void *p = malloc(10);                                //p指向的是堆内存的里边的一个地址
                int a = 8;                                                //a分配的在栈内存
              指针p里边存储的是10个字节的内存的首地址

           

              malloc 堆内存分配函数特点: 分配指定大小的内存空间,但是不会把分配到的内存空间给清0


内存释放:free

           void free(void *)
           free函数的作用是释放内存,内存释放是标记删除。标记删除不清除里边的内容。

           

            例子:加入一部电影占了2G内存,正常理解删除的电影的话,是应该吧这部定影就清楚了,也就是说,对应         的内存空间里边的字节全部清除。但是这是一个非常庞大的工作量需要很长那个时间来完成。但实际生活中删除          一部电影几乎1秒就完成了,其实也就是标记删除,告诉系统这2G内存空间不用,谁想用分配给谁。

其他的分配函数:
            calloc(unsigned m, unsigned n)
            跟malloc不一样的地方在于,通过calloc分配的内存空间上的所有字节都会被清0


            realloc(<#void *#>p, unsigned newsize) 按新的长度重新赋值

其他内存操作函数

         void *memset (void *s, int c ,size_t n)

            s是指针的首地址,从s指向的内存地址开始分配,分配n个字节大小的数据c

            通常用于清除结构体或者数组中的数据


       memcpy(<#void *#>dest, <#const void *#>source, <#size_t#> n) 内存的拷贝
             从source指向的位置开始拷贝,拷贝到的dest里边去,长度为n;

         free(p3);


内存比较:

         memcmp p1、p2是两个指针,比较p1和p2内存地址里边的值的ASCII值,结果可为<0 >0 =0

               memcmp(const void *p1, <#const void *#>p2, sizeof(p1))


----------------------------------------------------------------------------------------------

        堆内存专属函数:malloc calloc realloc

         内存操作函数,既可以用于堆内存,也可以用于栈函数 memcpy memcmp memset

----------------------------------------------------------------------------------------------

版权声明:本文为博主原创文章,未经博主允许不得转载。

操作系统基本分页存储管理方式

操作系统基本分页存储管理方式 连续分配内存方式会形成许多“碎片”,通过紧凑的方式将碎片拼接成一块大的空间,但是拼接过程系统开销太大。如果允许将一个进程直接分散地装入到许多不相邻的分区中,那么就不需要再...
  • CSDN515
  • CSDN515
  • 2014年05月01日 22:54
  • 4013

《操作系统》—页式存储管理

说到页式存储管理,我想应该先说用户的程序,因为页式存储管理就是为用户的程序或者是说进程服务的,一个程序编制好了以后它肯定占用空间,也就是说它肯定有大小,程序既然有大小就能将它划分,在这里,就将程序的逻...
  • u013067402
  • u013067402
  • 2015年04月26日 19:59
  • 2068

请求式分页存储管理算法(操作系统)C/C++

一、先进先出算法(First in First out) 算法描述: 该算法的实质是选择作业中在主存驻留时间最长的一页淘汰,这种算法容易实现,例如分配一个作业的存储块数为m,则只需建立一张m个元素...
  • g15827636417
  • g15827636417
  • 2016年12月29日 14:29
  • 2114

基础数据在内存中的存储-C语言

在计算机中 1、十进制 ---二进制换算 (1)二进制---》十进制  10.101 (二进制转十进制 ) 1*2(1)+0*2(0) + 1*2(-1)+...
  • xiaoliu0518
  • xiaoliu0518
  • 2014年06月17日 17:02
  • 419

黑马程序员_iOS开发C语言基础之二进制内存存储解析与字符操作

1、内存中变量的二进制存储 #include  int main() {     //  一个int类型数据占据4个字节、32bit     // 0000 0000...
  • LyWsLxYBoY
  • LyWsLxYBoY
  • 2014年09月28日 23:06
  • 535

c语言 float double数据类型的内存中的存储和验证

  • 2015年06月07日 15:30
  • 268KB
  • 下载

C语言中浮点数在内存中的存储格式

首先给出查阅资料的一些链接: 首先来看两个例子: #include #include union stu { int i; char c; float f; }a...
  • yushanjin0767
  • yushanjin0767
  • 2013年12月26日 13:45
  • 674

C语言变量存储区域 进程内存布局

C程序中,内存通常分为几个大区:共享存储区、栈区、堆区、全局静态区、文字常量区,此外还有程序代码区,其中,全局静态区又可以分为全局非初始化区和全局初始化区,从具体程序中来看,初始化和非初始化的全局OR...
  • hustsselbj
  • hustsselbj
  • 2015年08月28日 15:54
  • 859

从内存理解c语言中变量的存储类型

转载至:http://blog.csdn.net/hackerain/article/details/7953261# 看c专家编程,有说存储类型一直不太清楚。看到一篇文章讲解c...
  • lh8023yisheng
  • lh8023yisheng
  • 2017年06月29日 16:10
  • 71

从内存理解c语言中变量的存储类型

今晚看了一下linux程序设计,看到了进程管理这一块,讲解了c语言中的各种变量的存储类型,而且是从进程、内存的角度讲解的,以前从没有这样理解过,觉得挺有用的,在这里记录下来。 首先要来理解一下可...
  • michaelyue526
  • michaelyue526
  • 2012年10月14日 10:46
  • 2801
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言基础-- 内存存储
举报原因:
原因补充:

(最多只允许输入30个字)