关闭

《c语言从入门到精通》看书笔记——第15章 存储管理

标签: c语言内存的组织方式堆和栈内存丢失
255人阅读 评论(0) 收藏 举报
分类:
1、内存的组织方式
     程序被组织成以下4个逻辑段
     (1)可执行代码
     (2)静态数据。可执行代码和静态数据存储在固定的内存位置
     (3)动态数据(堆)。程序请求动态分配的内存来自内存池,也就是上面所列举的堆。
     (4)栈。局部数据对象、函数的参数以及调用函数和被调用函数的联系放在成为栈的内存池中。
          堆和栈可以是被所有同时运行的程序共享的操作系统资源,也可以是使用程序独占的局部资源。
2、堆和栈
     (1)堆
          在内存的全局存储空间中,用于程序动态分配和释放的内存块称为自由存储空间,通常也称之为堆。
          在C程序中,是用malloc和free函数来从堆中动态地分配和释放内存。
     (2)栈
          当程序调用函数和声明局部变量时,系统将自动的分配内存。
          栈是一个后进先出的压入弹出式的数据结构
94动态管理
     (1)malloc函数
          void *malloc(unsigned int size);
          在stdlib.h头文件中包含该函数,作用是在内存中动态的分配一块size大小的内存空间。malloc函数会返回一个指针,该指针指向分配的内存空间,如果出现错误,则返回NULL。
     注意:使用malloc函数分配的内存空间是在堆中,,而不是在栈中。因此在使用完这块内存后一定要将其释放掉,释放内存空间使用的是free函数。
     (2)calloc函数
          void *calloc(unsigned n,unsigned size);
          使用该函数也要包含stdlib.h头文件,其功能是在内存中动态的分配n个长度为size的连续内存空间数组。calloc函数会返回一个指针,该指针指向动态分配的连续内存空间地址。当分配空间错误时,返回NULL。
     (3)realloc函数
          void *realloc(void *ptr,size_t size);
          使用该函数要包含头文件stdlib.h,其功能是改变ptr指针指向的空间大小为size大小。返回值是一个指向新地址的指针,如果出现错误,则返回NULL。
     (4)free函数
          void free(void *ptr);
          free函数的功能是使用由指针ptr指向的内存区,使部分内存区能被其他变量使用。ptr是最近一次调用calloc或malloc函数时返回的值。free无返回值。
3、内存丢失
     在使用malloc等函数分配内存后,要对其使用free函数进行释放。因为内存不进行释放会造成内存遗漏,从而可能会导致系统崩溃。
0
0
查看评论

C语言入门教程:c语言从入门到精通(2016最新版)

C语言入门教程地址:http://c.biancheng.net/cpp/u/jiaocheng/
  • hhsu28
  • hhsu28
  • 2016-10-25 20:45
  • 731

C语言入门(二十)结构体

结构体  前言: 结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。结构中可以使用不同的数据类型。 一、结构说明和结构变量定义 在Turbo C中,结构也是一种数据类型,可以使用结构变量,因此,象其它类型的变量一样, 在使用结构变量时要先对其定义。 定义结...
  • caihongdao123
  • caihongdao123
  • 2016-07-12 17:03
  • 6546

Java从入门到精通阅读笔记(第4版)4

Java常见异常 ClassCastException 类型转换异常 ClassNotFoundException 未找到相应类异常、 ArithmeticException算数一场 ArrayIndexOutOfBoundsException数组下标越界异常 ArratStoreExce...
  • zarathurstra
  • zarathurstra
  • 2017-03-02 21:21
  • 522

C语言从入门到精通所需的7本书

1. C Primer Plus  ![image.png](http://upload-images.jianshu.io/upload_images/1956008-f959cc5bbec7f36f.png?imageMogr2/auto-orient/strip%7Cima...
  • bobohelloworld
  • bobohelloworld
  • 2018-01-12 23:49
  • 114

linux从入门到精通(第2版)pdf

下载地址:网盘下载 内容简介 编辑 Linux是目前增长最迅速的操作系统。《Linux从入门到精通》由浅入深、循序渐进地向读者介绍Linux的基本使用和系统管理。全书内容包括Linux概述、Linux安装、Linux基本配置、桌面环境基本操作、Shell基本命令、文件和...
  • cf406061841
  • cf406061841
  • 2017-05-30 12:56
  • 1799

ORACLE从入门到精通 明日科技编著 清华大学出版社

http://pan.baidu.com/s/1gePoRAV
  • ggkmskj
  • ggkmskj
  • 2017-06-07 17:04
  • 1137

Java从入门到精通阅读笔记(第4版)6

大数字运算 Java中提供了大数字的操作类,即java.math.BigInteger和java.math.BigDecimal类 BigInteger public BigInteger(String val) BigInteger twoInstance=new BigInteger(&quo...
  • zarathurstra
  • zarathurstra
  • 2017-03-07 21:10
  • 476

asp.net从入门到精通第三版光盘全部内容

asp.net从入门到精通第三版光盘
  • qq_22973115
  • qq_22973115
  • 2016-10-03 18:05
  • 2321

书单(一)JavaScript从入门到精通(第二版)

书单(一)JavaScript从入门到精通(第二版) 1、这本书适合初学JavaScript的同学们,因为我也是刚刚进入web开发的行列来,所以也是小白一名,选择这本书作为入门,应该可以的。 2、读这本书之前,可能你都不知道什么是JavaScript,JQuery,Ajax等等,学习web方面就是术...
  • wild46cat
  • wild46cat
  • 2016-03-15 23:58
  • 957

读《Oracle从入门到精通》笔记--持续更新中

第一章 Oracle 11g概述 1.6节 启动与关闭数据库实例 启动数据库: Startup [nomount|mount|open|force][resetrict][pfile=filename] 解释:nomount ---> 表示启动实例不加载数据库 mount --...
  • u011009161
  • u011009161
  • 2016-05-06 19:44
  • 1836
    个人资料
    • 访问:16963次
    • 积分:402
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条
    文章分类