当前位置: 首页 > 原理解释

计算机计算程序的原理-计算机程序原理

咱这计算机程序,说白了就是个按步骤步行的伙计,它不需求会讲话,更不需求像人一样有感情。
那会儿我在机房里待过,见过那种为了跑个演示,把整个系统全挂上去,结局出于一个参数没对齐,后台直接把硬盘都刷了一遍的惨事。
那时候我就悟了,程序不是靠智慧,而是靠死记硬背的凑数法。 核心逻辑实际上就那三件事:猜、算、改。启动程序的时候,它先问自己:我目前该算哪一步?这还不好办,直接查代码库就行。
要是代码库里没写,那就得去网上找类似难题的解决方案,要么自己去猜一个数试。试出来的那个数,记在案子里,这叫初始化。接下来是算。
这一阶段最讲究精度,浮点数运算最怕那些怪的舍入误差,有时候差个一百万分之一,眼一眯,结局就全歪了。我就见过有人写个计算器,两个九相乘,结局出来是八,多亏了他把结局存成双精度浮点数,多算几位,误差才管住在准范围内。最细密的是改。算完一次,得重新算一遍。算完了再来算一遍,反正多一次,误差就小一圈。
这就叫迭代,每次迭代都是把之前那个估算值当成新的起点,往前推,直到改到某个数,你再算一次,发现它自己变了,要么跟之前那个数差不多了,那就认定了。
这过程永无止境,直到真正停下来,这时候一般意味着达到了某种状态,要么程序该死了。 再讲如何保存。保存不是好办的“存盘”,那是操作系统的事。程序自己存的是个结构化的数据,比如字符串数组、链表、矩阵,就连是一堆乱七八糟的杂项。保存的时候得根据类型用对应的格式,字符串变 ASCII 码,数字变二进制,布尔值变标志位。读取的时候反过来。
要是把保存过程比作一个人搬家,那程序就是那个拿着打包箱的人。打包的时候得把里面的东西一层层包起来,不能漏了也没能多包,不然打开一看,里面全是空气。读取的时候就得拆出来,还得再包一次,这叫二次打包。
有时候程序会坑,比如把字符串存成了数组,但数组后面还留着没用的位置,要么把类型搞错了,害得后来打开一看,全是字符,根本读不出数字。我就见过有人写个文件处理程序,出于它没搞清那种特殊的分隔符定义,结局把逗号当作了终止符,后面的一长串数据全被吞了。 还有内存这块,也是程序的重灾区。程序跑起来,它得把一堆临时变量、中间结局、缓存数据统统塞进内存里。
这玩意儿就像是一个庞大的临时仓库,数据在里面翻腾,随时能够拿出来用,用完就扔。内存的大小取决于你的机器,常见的有 128MB、2GB、8GB,大的有几十 GB。
要是内存不够用了,程序就得拼命去抢,这时候你就得寻思如何优化算法,要么干脆换个大机器。
有时候程序会卡死,那就是内存爆炸了,数据塞不下了。
这时候修复的方式要么减小内存占用,要么干脆把程序删了再重新跑一遍。 最终就是运行环境。程序不是想跑就跑的,你得有个“场地”。操作系统供给进程、线程、调度这些机制,让它们有序地排队干活。编程语言供给语法和运算规则,告诉程序如何做加法,如何做乘法,如何写循环。
要是环境不对,比如用的 Python 跑个 C 语言的字节码,要么反过来,那程序就活得全身而退,要么魂飞魄散。就像你给一个工人发图纸,图纸画得跟他的手艺不匹配,他做出来的东西可能就是一个糊图烂纸,要么是个歪七扭八的物体。 实际上说到底,程序就是一个个经过精心设计的“解题步骤”。它没有理解力,不会思索,但它模仿人类逻辑做了一万遍的数学运算。它把逻辑关系封装成代码,把数据处理成指令,最终通过硬件把这些指令变成电信号流动起来。整个过程没有思索,全靠代码里的逻辑硬生生把工夫轴拉直。
相关标签:

猜你喜欢

热门阅读

  • 赖柴尔定理-赖柴尔定理
  • 迪拜哪个国家的城市?-迪拜在哪国城市
  • 李毅吧番号及出处-李毅吧番号及出处
  • 贴春联的由来简介50字-春联由来简述
  • 思乡的名言和出处-思乡名言及出处

其他分站