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函数进行释放。因为内存不进行释放会造成内存遗漏,从而可能会导致系统崩溃。

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

  1. 《c语言从入门到精通》看书笔记——第16章 网络套接字编程(上)——网络

    1.IP地址 每台计算机都需要一个IP地址以识别自己,IP地址由IP协议规定的32位的二进制表示,最新的IPV6协议将IP地址提升为128位,但还不能广泛应用. 32位的IP地址主要分为前缀和后最两部 ...

  2. 《c语言从入门到精通》看书笔记——第14章 文件

    1.文件的基本操作 (1)文件指针 文件指针是指向文件有关信息的指针,这些信息包含文件名,状态,和当前位置,他们保存在一个结构体变量中.在使用文件时需要在内存中为其分配空间,用以存放文件的基本信息.该 ...

  3. 《c语言从入门到精通》看书笔记——第13章 预处理

    1.宏定义 宏定义是预处理命令的一种,它提供了一种可以替换源代码中字符串的机制. 宏定义指令#define用来定义一个标识符和一个字符串,一这个标识符来代表这个字符串,在程序中每次遇到该标识符时就用所 ...

  4. 《c语言从入门到精通》看书笔记——第10章 指针

    1.地址与指针 地址:就是内存区中对每个字节的编号 指针:可以看作是内存中的一个地址.在程序中定义了一个变量,在进行编译时就会给该变量在内存中分配一个地址,通过访问这个地址可以找到相应的变量,这个变量 ...

  5. 《c语言从入门到精通》看书笔记——第3章 数据类型

    1.编程规范 (1)代码缩进:统一为4字符,用Tab (2)变量常量命名规范:常量命名统一为大写格式.如果成员变量,均以m_开始.普通变量,取与实际意义相关的名称,要在前面添加类型的首字母,并且名称的 ...

  6. 《c语言从入门到精通》看书笔记——第2章 算法

    1.通常,一个程序包含算法.数据结构.程序设计方法及语言工具和环境这四个方面 2.算法的特性: 有效性.确定性.可行性.输入(一个算法应有零个获多个输入).输出(1个或多个) 3.算法的优劣: (1) ...

  7. 《c语言从入门到精通》看书笔记——第1章 C语言的概述

    1.使用普遍的高级语言有:Fortran/ALGOL/Basic/COBOL/LISP/Pascal/PRLOLG/C/C++/VC/VB/Delphi/Java等 2. C语言是一个面向过程的语言, ...

  8. 《c语言从入门到精通》看书笔记——第16章 网络套接字编程(下)——套接字

    1.套接字概述 套接字是网络通信的基石,是网络通信的基本构件. 所谓套接字,实际上是一个指向传输提供者的句柄.在WinSock中,就是通过操作该句柄来实现网络通信和管理的.根据性质和作用不同,套接字可 ...

  9. 《c语言从入门到精通》看书笔记——第12章 位运算

    1.按位运算就是对字节或字中的实际位进行检测.设置或移位. 位运算符 2.位段的概念与定义 位段类型是一种特殊的结构类型,其所有成员的长度均是以二进制位为单位定义的,结构中的成员被称为位段.位段定义的 ...

最新文章

  1. PHP 实现Office word 关键词添加背景色
  2. Xamarin XAML语言教程使用Xamarin Studio创建XAML(二)
  3. OpenCV与c语言图像融合
  4. WPF基础入门2 - WPF窗口类和垂直布局面板基本使用
  5. 从编码层面对比java和c#
  6. tomcat安装启动配置
  7. git 修改已提交的 commit
  8. aop源码分析之 —— 创建代理对象
  9. SQL ROUND函数用法
  10. Csico CCNA学习笔记1_cdp telnet
  11. 七年为限 一觉梦已远——我与你的新贵族
  12. Ansys Speos | 助力汽车按键开关设计与优化
  13. 土地利用转移矩阵--更新中
  14. html中什么字体的英文好看,英语字体有哪些?英语哪种字体最好看
  15. 目标客户画像_目标客户和用户画像
  16. 不懂域名系统,何谈网络编程
  17. Batch Normalization论文翻译——中文版
  18. 暴雪娱乐-魔兽世界:地下城的环境艺术
  19. 前台中文传参后台乱码解决方案
  20. OCR:通用数码管图像识别训练和使用

热门文章

  1. My task - how is inline creation implemented
  2. SAP UI5里的senderActive标志位
  3. Jerry本地安装SAP Kyma的一些失败尝试
  4. 二叉树的应用- 找出倚天屠龙记小说里所有的成语
  5. AG9 Service order创建好之后,要自动通过middleware传其他系统去 disable
  6. SAP CRM WebClient UI F4 value help is centrally implemented in CRM_THTMLB_UTIL/F4Frameset.html
  7. Spring MVC原理学习之how is return type handled
  8. Mockito框架研究 - how is match any string implemented
  9. 如何查找SAP CRM通过中间件Middleware连接的远端ERP系统
  10. nodejs因buildpack指定不当部署到CloudFoundry后出的一个错误