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 小结

本章主要针对内存的分配方式进行了详细讲解,根据内存的分配方式将内存分为静态内存和动态内存,在分别对两类内存进行了详细讲解后,得知在使用动态内存时会有很大的风险,很容易引起内存的泄露等问题,也很可能导致程序瘫痪,因此,要了解内存管理的基本操作,进而对动态内存的分配操作和释放操作进行了介绍,熟悉了这些内存操作会使程序员在编写程序时更加得心应手。而链表作为一种数据结构卡会经常使用到动态内存的存储方式,故在本章中对创建动态链表也做了详细介绍。

本章主要围绕内存分类,以及内存在编程中的使用进行了讲解,希望读者在理解了内存管理后,能够在编程过程中更加安全有效地实现所需的功能。

0 0
原创粉丝点击