c语言中需要内存来存放数据。而内存主要分为两类:静态存储区和动态存储区。

1、静态存储区

(1)分为数据区(只读数据区(代码区?在linux中又叫文本段.text)、读写数据区.data)、未初始化区(BSS)。

(2)它们都是在程序编译连接阶段确定的。

2、动态存储区

(1)分为堆和栈。

(2)程序执行过程中动态分配,大小也随之动态变化。

(3)从内存管理的实现的角度看来,堆使用链表实现,而栈使用的是线性存储的方法。

补:

(1)关于栈

栈:栈是先进后出,实际的操作中,栈内存可以有满栈和空栈的情况。

满栈的情况下,栈指针当前的位子是已经使用的的栈区域;空栈的情况是,栈指针当前的位子是没有使用的栈区域。

满栈时:入栈,是先移动指针,再放入数据;出栈则是先出数据,再移动指针;

空栈时:入栈,是先放入数据,再移动指针;出栈则是先移动指针,再出数据;


(2)关于全局变量和局部变量的存储

a、全局变量只会存在于数据区或者BSS区。如果初始化(为非0),则存储在数据区,否则(初始化为0或者不初始化)存储在BSS区。

b、局部变量分为普通(auto)局部变量、静态局部变量。

前者存储在栈中,如果没有初始化则为随机值;后者存储在数据区(初始化为非0)或BSS区(初始化为0或者不初始化)。

3、存储类、生命周期,作用域、链接属性

(1)存储类表明变量在哪里存储,生命周期表明什么时候为变量分配、收回内存,作用域表明变量起作用的范围(代码块,函数域,文件域);

(2)存储类决定了生命周期,作用域决定了链接属性。

(3)上面1,2中是存储类的知识点;

(4)作用域表明变量起作用的范围(代码块,函数域,文件域);

(5)链接属性有外链接、内链接、空链接(不参与链接)。

C中静态存储区和动态存储区相关推荐

  1. 静态存储区与动态存储区

    1.程序区 用于存储程序的代码,即程序的二进制代码. 2.静态存储区 用于存储全局变量和静态变量,这些变量的空间在程序编译时就已经分配好了. 3.动态存储区 用于在程序执行时分配的内存,又分为:堆区( ...

  2. k8s技术预研13--kubernetes共享存储原理与动态存储供应用使用示例

    1.共享存储机制概述 Kubernetes对于有状态的容器应用或者对于数据需要持久化的应用,不仅需要将容器内的目录挂载到宿主机的目录或者emptyDir临时存储卷,而且需要更加可靠的存储来保存应用产生 ...

  3. C语言—静态存储与动态存储

    静态存储和动态存储 变量从变量值存在的时间(即生存期)角度分:静态存储方式和动态存储方式 静态:在编译时确定了固定的内存地址与内存大小,如:函数里的局部变量.全局变量等 动态:由程序控制,运行时主动性 ...

  4. 堆/栈/动态存储方式/静态存储方式

    动态存储方式 所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式.动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放. 典型的例子是函数的形式参数,在函数定 ...

  5. 动态存储和静态存储区域区别

    动态存储方式 所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式.动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放. 典型的例子是函数的形式参数,在函数定 ...

  6. 动态存储方式和静态存储方式

    从变量的作用域的角度来观察,变量可以分为全局变量和局部变量: 全局变量都是存放在静态存储区中的.因此它们的生存期是固定的,存在于程序的整个运行过程 局部变量,如果不专门声明存储类别,都是动态地分配存储 ...

  7. 动态存储方式与静态存储方式

    从变量的作用域的角度来观察,变量可以分为全局变量和局部变量: 全局变量都是存放在静态存储区中的.因此它们的生存期是固定的,存在于程序的整个运行过程 局部变量,如果不专门声明存储类别,都是动态地分配存储 ...

  8. C语言中局部变量和全局变量 变量的存储类别

    C语言中局部变量和全局变量 变量的存储类别(static,extern,auto,register)   局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用 ...

  9. 顺序表的动态存储细节

    顺序表的动态存储细节 @(算法学习) 在顺序表的动态存储定义中需要包含的数据成员是(C) I. 数组指针 II. 表中元素个数n III. 表的大小maxSize IV. 数组基址base A. I ...

最新文章

  1. [Swift]NSString、NSData、Base64互转
  2. Tableau研学小课堂(part3)--Tableau数据可视化
  3. 如何在SAP Spartacus里增添自定义的配置条目
  4. 【java8新特性】——Stream API详解(二)
  5. Linux系统简单实验操作rm
  6. 学习C++编程的优势有哪些?
  7. MWL/Modality Worklist SCP、Wordlist成像设备工作列表
  8. 芒果移动广告优化平台
  9. JavaWeb在线商城系统(java+jsp+servlet+MySQL+jdbc+css+js+jQuery)
  10. 2015-nature-deep learning-LeCun, Bengio and Hinton
  11. Ignite分布式的内存数据库简单应用
  12. linux如何将两个文件拆分,linux下用split命令将一个大的文件拆分成若干小文件
  13. 全市场等权中位数_市场指数估值周报20200523
  14. 百度云服务器BCC centos实例搭建vsftpd站点
  15. Derivation of Linear Regression with Multiple Variables
  16. c语言程序如下,某C语言程序如下: #include stdio.h void main() { floa.._简答题试题答案...
  17. 九、结构体共用体枚举
  18. 大小写切换c语言程序设计教程课后答案,中国大学MOOC-翁恺-C语言程序设计习题集 05-0 到 06-3...
  19. 智慧水务系统方案介绍(什么是智慧水务系统)
  20. 宝德服务器 raid制作,宝德服务器RAID操作手册EX16650用户手册.doc

热门文章

  1. 前端框架开始学习Vue(一)
  2. 【hdu 6444】Neko's loop
  3. vue 二进制文件的下载(解决乱码和解压报错)
  4. [BZOJ 1026] [SCOI 2009] Windy数 【数位DP】
  5. PHP多线程的实现(PHP多线程类)
  6. pureMVC简单示例及其原理讲解四(Controller层)
  7. 证书的应用之一 —— TCPSSL通信实例及协议分析(上)
  8. 每日集成Tip: CruiseControl.Net 提示DLL文见找不到的解决方法
  9. Jenkins自动编译库并上传服务器
  10. 网易NEI在面临前后端分离问题,所提供的完整解决方案