C#利用短信远程关闭计算机源代码哦哦哦哦哦哦
0 | 0 |
为了良好体验,不建议使用迅雷下载
会员箌期时间: 剩余下载个数: 剩余C币: 剩余积分:0
为了良好体验不建议使用迅雷下载
为了良好体验,不建议使用迅雷下载
0 | 0 |
为了良好体验鈈建议使用迅雷下载
您的积分不足,将扣除 10 C币
为了良好体验不建议使用迅雷下载
开通VIP会员权限,免积分下载
XJK-XG2E型微热再生吸附式干燥机控淛器采用了单片微控制器芯片(美国MICROCHIP公司的16C7×系列MCU)和其他新型集成电路;可根据用户设定的参数控制系统工作具有故障报警,工作时間倒计时显示功能及各个工作点的温度检测功能显示屏采用128*32点阵式液晶汉字显示(8*2),有上位机通讯功能可实现本地/远程的切换。
浙江省杭州市余杭區闲林街道嘉企路19号4幢01室一层 |
有限责任公司(自然人投资或控股) |
杭州市余杭区市场监督管理局 |
生产:从事工业控制计算机及配套设备、继电器、集中控制设备、电子计算机及配件、自动化成套控制系统仪表(盘、柜);工业控制计算机及配套设备,模拟计算机继电器,集中控制装置自动化成套控制系统仪表盘、柜的安装;工业控制计算机设备的咨询;电子计算机及配件,电器机械及器材仪器仪表的批发、零售;含下属分支机构经营范围。(依法须经批准的项目经相关部门批准后方可开展经营活动) |
对于PHP这种需要同时处理多个请求嘚程序来说申请和释放内存的时候应该慎之又慎,一不小心便会酿成大错另一方面,除了要安全的申请和释放内存外还应该做到内存的最小化使用,因为它可能要处理每秒钟数以千计的请求为了提高系统整体的性能,每一次操作都应该只使用最少的内存对于不必偠的相同数据的复制则应该能免则免。我们来看下面这段PHP代码:
第一条语句执行后PHP创建了$a这个变量,并为它申请了12B的内存来存放"hello world"这个字苻串(最后加个NULL字符你懂的)。紧接着把$a赋给了$b并释放掉$a;
对于PHP来说,如果每一次变量赋值都执行一次内存复制的话那需要额外申请12B嘚内存来存放这个重复的数据,当然为了复制内存,还需要cpu执行某些计算这当然会加重cpu的负载。当第三句执行后$a被释放了,我们刚才的設想突然变的这么滑稽这次赋值显得好多余哦。如果早就知道$a不用了那我们直接让$b用$a的内存不就行了,还赋值干嘛如果你觉得12B没什麼,那设想下如果$a是个10M的文件内容或者20M,是不是我们的计算机资源消耗的有点冤枉呢
别担心,PHP很聪明!
前面说过PHP变量的名称和值在內核中是保存在两个不同的地方的,值是通过一个与名字毫无关系的zval结构来保存而这个变量的名字a则保存在符号表里,两者之间通过指針联系着在我们上面的例子里,$a是一个字符串我们通过zend_hash_add把它添加到符号表里,然后又把它赋值给$b,两者拥有相同的内容!如果两者指向唍全相同的内容我们有什么优化措施吗?
现在我们检查$a和$b两个变量他们的值指向了"Hello NowaMagic!"这个字符串在内存中的位置。但是在第三行:unset($a);这条語句释放了$a在这种情况下,unset函数并不知道$a的值同时被$b用着所以如果它直接释放内存,则会导致$b的值也被清空了从而导致逻辑错误,甚至可能会导致系统崩溃
呵呵,其实你心里明白PHP不会让上述问题发生的!回顾一下zval的四个成员value、type、is_ref__gc、refcount__gc,我们对value和type已经很熟了现在则昰后两个成员发挥威力的时候了,这里我们主要讲解refcount__gc这个成员当一个变量被第一次创建的时候,它对应的zval结构体的refcount__gc成员的值会被初始化為1理由很简单,因为只有这个变量自己在用它但是当你把这个变量赋值给别的变量时,refcount__gc属性便会加1变成2因为现在有两个变量在用这個zval结构了!
以上描述转为内核中的代码大体如下:
这个时候当我们再用unset删除$a的时候,它删除符号表里的$a的信息然后清理它的值部分,这時它发现$a的值对应的zval结构的refcount值是2也就是有另外一个变量在一起用着这个zval,所以unset只需把这个zval的refcount减去1就行了!
引用计数绝对是节省内存的一個超棒的模式!但是当我们修改$b的值而且还需要继续使用$a时,该怎么办呢
从代码逻辑来看,我们希望语句执行后$a仍然是1而$b则需要变荿6。我们知道在第二句完成后内核通过让$a和$b共享一个zval结构来达到节省内存的目的但是现在第三句来了,这时$b的改变应该怎样在内核中实現呢
答案非常简单,内核首先查看refcount__gc属性如果它大于1则为这个变化的变量从原zval结构中复制出一份新的专属与$b的zval来,并改变其值
现在$b变量拥有了自己的zval,并且可以自由的修改它的值了
如果用户在PHP脚本中显式的让一个变量引用另一个变量时,我们的内核是如何处理的呢
莋为一个标准的PHP程序猿,我们都知道$a的值也变成6了当我们更改$b的值时,内核发现$b是$a的一个用户端引用也就是所它可以直接改变$b对应的zval嘚值,而无需再为它生成一个新的不同与$a的zval因为他知道$a和$b都想得到这次变化!
但是内核是怎么知道这一切的呢?简单的讲它是通过zval的is_ref__gc荿员来获取这些信息的。这个成员只有两个值就像开关的开与关一样。它的这两个状态代表着它是否是一个用户在PHP语言中定义的引用茬第一条语句($a = 1;)执行完毕后,$a对应的zval的refcount__gc等于1,is_ref__gc等于0; 当第二条语句执行后($b =
最后,在执行第三条语句的时候内核再次检查$b的zval以确定是否需要复淛出一份新的zval结构来,这次不需要复制因为我们刚才上面的get_var_and_separate函数其实是个简化版,并且少写了一个条件:
这一次尽管它的refcount等于2,但是洇为它的is_ref等于1所以也不会被复制。内核会直接的修改这个zval的值
我们已经了解了php语言中变量的复制和引用的一些事,但是如果复制和引鼡这两个事件被组合起来使用了该怎么办呢看下面这段代码:
The answer is: 不可能!在这种情况下,变量的值必须分离成两份完全独立的存在!$a与$c共鼡一个zval,$b自己用一个zval尽管他们拥有同样的值,但是必须至少通过两个zval来实现见下图【在引用时强制复制!】
同样,下面的这段代码同样會在内核中产生歧义所以需要强制复制!
需要注意的是,在这两种情况下$b都与原初的zval相关联,因为当复制发生时内核还不知道第三個变量的名字。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。