Linux C学习笔记——内存管理
来源:互联网 发布:玩守望先锋网络不稳定 编辑:程序博客网 时间:2024/06/06 03:53
本文为清华大学出版社出版的《Linux C从入门到精通》一书的学习笔记,在此感谢作者及相关人员。本文为原创学习笔记,转载请注明出处,谢谢。
3.1 内存分类
3.1.1 动态内存
当用户无法确定空间大小,或者空间太大、栈上无法分配时,会采用动态内存方式分配内存。
3.1.2 静态内存
所谓静态内存是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时完成的,不占用CPU资源。程序中的各种变量,在编译源程序时系统就已经为其分配了所需的内存空间,当该变量在作用域内使用完毕时,系统会自动释放所占用的内存空间。使用静态内存减少了很多内存资源的风向,如内存泄露、内存耗尽等问题,减少了风险的同时也带来了弊端。如数组,会造成内存溢出或浪费。
静态内存是由便一起来分配的,释放是由变量的作用域所决定的的,即当一个变量定义在一个自定义的功能函数中时,如果这个函数结束,该变量也会随之释放。这样,使用指针由子函数想主函数传递数据类的问题就无法实现了。因为子函数中的变量在子函数结束时,就会被释放,所以无法将值带回到主函数中。但是事情总有解决的办法,那就是可以在主函数中定义变量,在子函数中使用主函数中定义的变量传递值。(这就是为什么C语言中,函数的返回值往往是函数执行成功与否的标志变量,而采用输出参数的形式,返回处理结果)
3.1.3 动态内存与静态内存的区别
1)静态内存的分配是在程序开始编译时完成的,不占用CPU资源;而动态内存的分配是在程序运行时完成的,动态内存的分配与释放都是占用CPU资源的。
2)静态内存是在栈上分配的;而动态内存是在堆上分配的。
3)动态内存分配需要指针和引用数据类型的支持,而静态内存不需要。
4)静态内存分配是在编译前就已经确定了内存块的大小,属于按计划分配内存;而动态内存的分配是在程序运行过程中,根据需要随时分配的,属于按需分配。
5)静态内存的控制权是交给编译器的,而动态内存的控制权是由程序员决定的。
3.2 内存管理的基本操作
3.2.1 分配内存
1)void *malloc(unsigned int size)
2)void *calloc(unsigned n, unsigned size)
3)void *realloc(void *mem_address, unsigned int newsize);
4)void *memset(void *s, char ch, unsigned n);
3.2.2 释放内存
1)void free(void *memblock)
3.3 链表
3.4 小结
本章主要针对内存的分配方式进行了详细讲解,根据内存的分配方式将内存分为静态内存和动态内存,在分别对两类内存进行了详细讲解后,得知在使用动态内存时会有很大的风险,很容易引起内存的泄露等问题,也很可能导致程序瘫痪,因此,要了解内存管理的基本操作,进而对动态内存的分配操作和释放操作进行了介绍,熟悉了这些内存操作会使程序员在编写程序时更加得心应手。而链表作为一种数据结构卡会经常使用到动态内存的存储方式,故在本章中对创建动态链表也做了详细介绍。
本章主要围绕内存分类,以及内存在编程中的使用进行了讲解,希望读者在理解了内存管理后,能够在编程过程中更加安全有效地实现所需的功能。
- Linux C学习笔记——内存管理
- 【linux c】Linux c内存管理——你的数据放在哪_学习笔记_009
- Objective-c学习笔记03——内存管理
- Object-C学习笔记——内存管理
- C语言学习笔记(四)——内存管理
- C 内存管理学习笔记
- 《深入理解LINUX内核》学习笔记——内存管理
- linux内存管理学习笔记
- linux内存管理学习笔记
- linux c—内存管理(下)
- Linux C 程序内存管理【笔记】
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第九章 内存管理
- Objective-C学习——内存管理
- Object-C学习笔记十-----内存管理
- Objectiv-C学习笔记-内存管理小结
- object-c 内存管理学习笔记
- Objective-C基础教程学习笔记 内存管理
- Object C学习笔记4-内存管理
- java中几种常用的排序算法
- sql server 金额大小写
- 重新认识 java synchronized 加锁
- Linux C学习笔记——Linux系统概述
- Linux C学习笔记——C语言基础
- Linux C学习笔记——内存管理
- Linux C学习笔记——进程控制
- Linux C学习笔记——进程间通信
- ORACLE数据库SQL优化--->ORACLE访问数据的方法
- Linux C学习笔记——文件操作
- Linux C学习笔记——文件的输入/输出操作
- UML关系(泛化,实现,依赖,关联(聚合,组合))
- 2013 蓝桥杯 【初赛试题】 连号区间数
- 给Linux系统/网络管理员的nmap的29个实用例子