内存管理、内存分配malloc、free、realloc,printf小结
来源:互联网 发布:陌陌八格切图软件 编辑:程序博客网 时间:2024/06/05 10:45
现在将一些内存管理相关的知识总结一下,以便对之前的知识进行归纳,也让自己清楚薄弱环节,以及提醒自己许多东西还是要做好准备!
内存管理,片内碎片,片外碎片
内存分配机制malloc,realloc
内存释放机制free
指针的存放,堆区、栈区、数据区、代码区
变量的定义与初值
首先要了解内存中的存储空间,内存中用户区的存储空间主要分为程序区、静态存储区、动态存储区。
数据分别存放在静态存储区和动态存储区。静态存储区,主要存放全局变量和静态的局部变量。
动态存储区存放的数据为:
1 函数形式参数,在调用函数时给形参分配存储空间。
2自动变量(未加static声明的局部变量)
3函数调用时的现场保护和返回地址等。
对以上描述的动态存储区的数据,在函数调用开始时分配动态存储空间,函数结束时释放这些空间。在程序的执行过程中,这种分配和释放是动态的,如果在一个程序中两次调用同一函数,分配给此函数中的局部变量的存储空间地址可能是不相同的。
在C语言中,每个变量和函数有两个属性:数据类型和数据的存储类别。数据的类型这里不重点关注,重点关注数据的存储类别。数据的存储类别指的是数据在内存中存储的形式。存储类型具体包含四种:自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。根据变量的存储类别可以知道变量的存储域和生存期。
1 auto变量
函数中的局部变量,如果不专门声明为static存储类别,都是动态的分配存储空间的,数据存储在动态存储区中。auto可以省略。
2 static变量
用static声明的静态局部变量,在函数调用结束后不消失而是保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数结束时的值。编译时自动赋初值0。
虽然静态局部变量在函数调用结束后仍然存在,但是其他函数不能引用它。
3 register变量
一般情况下,变量的值是存放在内存中的。当程序中用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到运算器中。
如果有一些变量使用频繁,则为存取变量的值要花费不少时间。为了提高效率,c语言允许将局部变量的值存放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。
4 extern变量
外部变量是函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中的各个函数所引用。编译时将外部变量存放在静态存储区,有时候需要将函数声明为外部变量来扩展外部变量的作用域。
比如在程序文件的中间定义的函数只能让其后定义的函数使用,而如果上面的函数调用则需要使用extern关键字声明,以扩展作用域到整个文件。
另外如果在一个程序文件中定义的变量如果想在另外的文件中使用,在需要在定义文件中定义,在引用文件中使用extern关键字声明。
从以上分析可以看出————
把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。
把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。
因此static这个说明符在不同的地方所起的作用是不同的。应予以注意。
- 内存管理、内存分配malloc、free、realloc,printf小结
- 内存分配:malloc,calloc,realloc,free
- 动态内存分配(malloc colloc realloc free)
- linux C 之动态内存分配malloc ,calloc,realloc,free
- 动态内存分配(malloc、free、calloc、realloc)
- Linux 内存分配,malloc(), free(),calloc(),realloc()用法
- malloc free内存分配
- 内存管理之malloc、free、calloc和realloc
- 内存管理之malloc、free、calloc和realloc
- 动态内存管理(malloc、 free、 calloc、 realloc)
- c 内存动态分配 malloc free calloc realloc
- 内存对齐的malloc、realloc、free
- C_动态分配内存:malloc,realloc,calloc,free
- 内存分配,malloc()和free()
- 内存分配(malloc/realloc/calloc区别)
- 内存分配函数:realloc、malloc、calloc不同
- C语言内存分配:malloc、calloc、realloc
- 内存分配(malloc/realloc/calloc区别)
- 基于Pushlet实现的网站消息推送
- 。。。
- OpenSSL命令---rsa
- java读写property文件
- android Jni NDK开发环境搭建及其简单实例的编写
- 内存管理、内存分配malloc、free、realloc,printf小结
- A*算法解决八数码问题
- FreeModbus--完全分析--系列1
- poj 3146 Interesting Yang Hui Triangle(lucas定理的应用)
- java学习之路-----设计模式---工厂模式
- FastJson关于java的使用
- Android 在开发环境中已更换图片 但运行结果的图片仍为旧图片
- jQuery中的this与$(this)
- android service 的简单实例 binder service