程序由不同的段构成(代码段,数据段)
1.程序的静态特征就是指令和数据
2.程序的动态特征就是执行指令处理数据

A.段
传统上,一个程序一般会有这几个段:.text 、.data、.bss段
a.如果处理器由内存管理单元,那么可执行程序被加载到内存以后,通常会将.text段所在的内存空间设置为只读,以保护.text中的代码不会因为程序出错而被意外改写
b.处理器所需加工的数据是放在.data、.bss、.rdata段

代码示例
1.情况一

运行的结果图进行对比,可以看到的是.data和.bss段的大小有了变化,这是因为在第二个实验中增加了两个变量。对于初始化不为0 的变量,编译器会将它放入.data段中,而对于初始化为0的变化量会被放入.bss段中

二.栈
栈的作用:
1.当中断发生时用于保存处理器寄存器的值,以便中断返回时通过退栈回到被中断点继续程序的运行
2.用作函数参数和局部变量的存储空间。正因为栈还可以用于存放局部变量,所以栈指针的变化并不只是通过退栈才可以改变
3.函数调用时,栈用于保存函数的活动记录(栈帧信息),并发编程时,每一个线程拥有独立的栈
SP寄存器作为栈顶"指针"实现入栈操作和出栈操作

三.程序中的堆
1.堆是一片"闲置"的内存空间,用于提供动态内存分配
2.堆空间的分配需要函数支持
3.堆空间在使用结束后需要归还

四.小结
1.程序中的内容是通过段进行分类管理的。在传统的三个段中,.text段用于存放处理器指令,.data段用于存放初始化的全局和静态变量,.bss段则用于存放初始化为0和未初始化的全局和静态变量。一个程序不管有多少个段,各段都属于程序,数据和调试信息三大类的一种。
2.栈为函数参数和局部变量提供存储空间。局部变量所占用的内存空间是由编译器生成的指令自动分配与释放的,因此不存在像堆那样的内存泄漏问题。在多任务环境中,由于各任务的函数调用路径可以不同,所以每一个任务都有属于自己的栈空间
3.堆中的内存在没有分配出来之前,是整个系统所共享的。要从堆中获取内存,必须通过函数调用来实现。如果从堆中所分配获得的内存不在需要使用了,则必须调用相应的函数进行释放,否则会产生内存泄漏

转载于:https://blog.51cto.com/13475106/2370348

软件开发--深入理解程序的结构相关推荐

  1. iOS软件开发架构理解

    iOS软件开发架构理解 这个东西是硬伤,框架?自带的mvc? 自带的UIViewController UIView UINavigationController 这些算不算?当然算的,cocoa框架嘛 ...

  2. 软件开发工程师:程序员的职业规划就像软件工程

    软件开发工程师:程序员的职业规划就像软件工程 [url]http://www.accp-teem.com.cn/ArticleView/2007-8-1/Article_View_1224.Htm[/ ...

  3. 《基于模型的软件开发》——1.2 结构化开发

    本节书摘来自华章计算机<基于模型的软件开发>一书中的第1章,第1.2节,作者:[美]H. S.莱曼(H. S. Lahman)著, 更多章节内容可以访问云栖社区"华章计算机&qu ...

  4. 让你提前认识软件开发(14):程序中的算法

    第1部分 又一次认识C语言 程序中的算法 [文章摘要]         算法(Algorithm),是程序的灵魂.著名计算机科学家.图灵奖获得者沃思曾提出过一个公式:数据结构+算法=程序. 可见,算法 ...

  5. 移动软件开发 微信小程序 第四次实验

    2022年夏季<移动软件开发>实验报告 一.实验目标 1.综合所学知识创建完整的前端新闻小程序项目:能够在开发过程中熟练掌握真机预览.调试等操作. 二.实验步骤 1.项目需求 首页功能需求 ...

  6. 一个新手对软件开发的理解(写自第一个项目--Linpop之后)

    在沈阳东软(不是广告)呆了一个月的时候,c和Linux讲完了,如果说没有太扎实的基础的话,来东软培训还真是比较吃力.今年比较幸运貌似,碰上了开发经验丰富的老师.收获很多,也很大其实.看到第一篇整理贴居 ...

  7. 移动软件开发之小程序开发demo1

    参考wx开发文档 可以直接去看开发者文档   开始 | 微信开放文档 (qq.com) 开发前的准备 1.注册一个开发者账号 小程序 (qq.com) 2.下载一个编译器 稳定版 Stable Bui ...

  8. 软件开发工具(第2章:软件开发过程及其组织)

    一.软件开发的困难 程序员做好软件工作的关键是什么? 关键是两个转换: 第一个转换是用户对软件功能的理解与程序员对软件功能的理解之间的转换. (不同⾏业的⼈员对于事物的认识⽅法与描述⽅法是不同的.) ...

  9. 敏捷开发-互联网大厂们都在用的软件开发模式

    前言 近些年随着中国移动互联网的高速发展,几乎所有互联网公司和软件开发公司都在实践敏捷开发,那敏捷开发究竟是什么,相比于传统的瀑布开发有什么好处.对于小白程序员来讲,非常有必要了解何为敏捷开发. 什么 ...

最新文章

  1. linux检查正则表达式,正则表达式及Linux文本检查工具
  2. 13个不可不知的ASP.NET MVC扩展点
  3. 闲鱼:1月13日至1月19日冻结涉欺诈用户1.1万个
  4. Entity(Table)(Id) cannot be resolved to a type(spring boot)
  5. 环境软件android 游戏开发-libgdx(一)
  6. Linux Ubuntu 下安装与卸载 JDK,亲测有效~
  7. android解析xml文件的方式
  8. 网络出版服务许可证 你了解吗?
  9. 超级简单的自动刷新_输入名字,自动生成情侣头像~
  10. 修改linux服务器密码
  11. COGS2434 暗之链锁
  12. Windows 10 系统精简方案参考
  13. jdk1.8 stream() 把List对象 变成String
  14. MTK笔试面试题集锦
  15. 四川企立方:拼多多标题要怎么组成
  16. 什么是CHIP LAN片式网络变压器?片式网络变压器分哪几种?目前应用较多的是哪种片式结构?
  17. JECloud快速入门手册_【数据字典】
  18. 中关村科技企业家协会网安创新分会在京成立,墨云科技成为首批会员单位
  19. 金钱不能买什么读后感_金钱的魔力读后感
  20. 光学实验-偏振光的研究(matploylib)

热门文章

  1. IDEA的常用操作(快捷键)
  2. 区分BundleVersion和BundleShortVersionString
  3. 第七篇:数据预处理(四) - 数据归约(PCA/EFA为例)
  4. javaScript的调试(二)
  5. alter system switch logfile与alter system archive log current的区别
  6. Http 请求头中的 Proxy-Connection
  7. JavaWeb学习笔记——jsp内置对象
  8. 玩具javascript:cookie管理
  9. N皇后问题的位运算求解——目前最快的方法
  10. vi/vim: 使用taglist插件