C语言的数据存储
2017-04-18 18:41
253 查看
一、划分
1、代码区:存放编译后可执行代码的区域。2、静态存储区:存在着静态变量(static修饰的变量,如:static int a)以及全局变量。全局变量和静态变量在分配内存时会被初始化器初始化为类型0。
3、常量区:存放一些常量(如: char *p = “abcd”)且被认为是只可读的。
4、栈区:存放函数的形参和局部变量(包括符合类型的局部变量), 例如在main函数中定义一个int a; 编译器就会在栈区分配4个字节给a。函数结束后局部变量会被销毁。
5、堆区:C语言中用malloc realloc calloc
函数分配的动态内存都在堆区,如 char *p=(char*)malloc(10); 则p为指针,是一个局部变量,在栈区。p所指向的地址为堆区动态分配的空间,堆区由操作系统进行管理(可以认为有一个空闲内存分配表)。
二、动态存储方式与静态动态存储方式
1>从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量。从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。静态存储方式:是指在程序运行期间分配固定的存储空间的方式。
动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。
2>说明
(1)静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储空间,函数调用结束后即释放。
(2)静态局部变量在编译时赋初值,即只赋初值一次;而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
(3)如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。
(4)对于动态存储方式一般为malloc、realloc、calloc来进行申请时进行的实时分配。
malloc函数--分配内存块,但是不对内存块进行初始化(高效)
calloc函数--分配内存块,并且对内存块进行初始化(效率比malloc低)
realloc函数--调整先前分配的内存块(需要两个参数,且只进行尾巴扩充和缩小,不影响原来数据)
相关文章推荐
- C语言之数据的存储类别
- Linux下对C语言数据类型存储的介绍
- C语言解析日志,存储数据到伯克利DB
- 读朱兆祺攻破C语言之二----数据存储与变量
- C语言中程序与数据的存储位置
- C语言变量和数据存储
- c语言中各数据类型在内存中的存储方式
- 3.从零开始学习C语言--常量及数据的存储
- C语言中不同数据类型在内存中的存储格式研究
- c语言学习笔记_数据格式_int与char的存储方式小节
- C语言中数据的存储内存
- 单链表数据存储结构(c语言实现)
- C语言的各种数据在内存中如何存储?
- TFT LCD数据存储为BMP文件的C语言代码
- 在ios开发中遇到数据最好采用c语言中的数组存储
- C语言之数据的存储类别
- 小议C语言中数据的存储类型【喜欢那张内存图】
- C语言判断数据存储时大端模式还是小端模式
- C语言中的结构体数据存储-对齐规则
- C 语言编译过程 C语言中各种数据存储的不同内存区域 关于sizeof 结构体比实际的大的问题