引言
- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。 我们知道软件交易的基础是软件,你的每一笔交易行为都是被软件察觉和处理的,软件为什么这么智能?因为有代码,那作为开发者我们知道,代码只是文本一样的东西,存储在硬盘中,不运行是毫无价值的,那程序到底是如何运行的,今天就带大家聊聊。
程序
程序是由一堆数据和数据结构和处理逻辑组成,大家不要把程序想复杂了,其实程序很简单,就基本的选择结构、循环结构和顺序结构,但是它又不简单,就这简单的结构就可以进行多种组合,搭配数据结构和数据,能形成一个庞大的逻辑处理软件比如:我们的操作系统。
进程
操作系统把外部设备的程序加载到内存中,还没完,还要生成一个进程去调度和管理程序,什么程序先执行,那都是有说道的。
进程除了有用户数据段和程序数据段外,还有相应的程序运行环境比如:堆空间、栈空间等,进程创建好后,操作系统就可以把内存对应的程序一一编译成指令交给cpu执行,碰到比如for,while这些跳转语句,操作系统就不能取下一条指令给cpu,而是编译成跳转指令交给cpu。
堆空间
程序在运行的时候,发现需要创建一个对象或者一个数据结构,那就会在进程的堆空间中申请一块内存,这个内存的起始地址作为该内存的地址,同时保存在栈中。
栈空间
栈是一个先进后出的数据结构,其实我们完全可以用一个数组来模拟栈,只要提供入栈和出栈方法,并不对外提供索引取值的方法就可以了,入栈索引加加,出栈就索引减减,栈空间同样由操作系统维护,用来保存函数内部的局部变量和堆空间的内存地址等。
每次函数调用,操作系统都会在栈中创建对应的栈帧,正在执行的函数申请的局部变量、方法参数和堆内存地址都保存在栈帧中。