日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php loop 语法,Loop - SegmentFault 思否

發(fā)布時(shí)間:2024/9/3 php 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php loop 语法,Loop - SegmentFault 思否 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在進(jìn)行C/C++編程時(shí)需要程序員對(duì)內(nèi)存的了解比較精確,經(jīng)常使用到的內(nèi)存有以下幾種:

棧:由編譯器自動(dòng)分配和釋放,存放函數(shù)的參數(shù)值、局部變量的值,操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧堆:一般由程序員分配和釋放,與數(shù)據(jù)結(jié)構(gòu)中的堆是兩碼事,操作方式類似于鏈表

全局區(qū)(靜態(tài)區(qū)):全局變量和靜態(tài)變量的存儲(chǔ)時(shí)放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和靜態(tài)變量在一塊區(qū)域,程序結(jié)束后由系統(tǒng)釋放

文字常量區(qū):常量字符串

程序代碼區(qū):程序的二進(jìn)制代碼

用代碼解析:

[cpp] view plaincopyprint?

1.int a=0;//全局初始化區(qū)

2.char p1;//全局未初始化區(qū)

3.main()

4.{

5. int b;//棧

6. char s[]="aaa";//棧

7. char *p2;//棧

8. char *p3="bbb";//p3在棧,“bbb”在常量區(qū)

9.

10. static int c=0;//全局初始化區(qū)

11. p1=(char)malloc(10);//堆

12. strcpy(p1,"123");//123 在常量區(qū)

13.}

14.

int a=0;//全局初始化區(qū)char p1;//全局未初始化區(qū)main(){ int b;//棧 char s[]="aaa";//棧 char *p2;//棧 char *p3="bbb";//p3在棧,“bbb”在常量區(qū) static int c=0;//全局初始化區(qū) p1=(char)malloc(10);//堆 strcpy(p1,"123");//123 在常量區(qū)}區(qū)別:

1,棧由系統(tǒng)自動(dòng)分配和釋放,堆由程序員申請(qǐng)并釋放

2,只要棧的剩余空間大于所申請(qǐng)的空間,系統(tǒng)就分配,否則,報(bào)異常

對(duì)于堆,操作系統(tǒng)有一個(gè)記錄空閑內(nèi)存地址的鏈表,當(dāng)系統(tǒng)收到申請(qǐng)時(shí),會(huì)遍歷該鏈表,尋找第一個(gè)空間大于所申請(qǐng)空間的堆節(jié)點(diǎn),然后將該節(jié)點(diǎn)從空閑區(qū)鏈表中刪除,將該節(jié)點(diǎn)的空間分配給程序,若是找到的節(jié)點(diǎn)地址空間大于申請(qǐng)的大小,系統(tǒng)會(huì)把剩余的節(jié)點(diǎn)空間重新添加到內(nèi)存空閑區(qū)鏈表中3,對(duì)與棧,在window下,棧是向低地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是一塊連續(xù)的區(qū)域,棧的大小事2MB,如果申請(qǐng)的空間超過(guò)棧的剩余空間,將提示棧溢出

對(duì)與堆,是向高地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),且不連續(xù),堆的大小受限于計(jì)算機(jī)系統(tǒng)的虛擬內(nèi)存,堆獲得的空間比較大,也比較靈活4,申請(qǐng)效率,棧由系統(tǒng)分配,速度快,程序員無(wú)法控制。堆由程序員分配,速度慢,容易產(chǎn)生碎片,用起來(lái)方便

5,內(nèi)容,棧在函數(shù)調(diào)用時(shí),參數(shù)由右往左入棧,然后是局部變量,靜態(tài)變量不入棧 出棧時(shí),局部變量先出棧,然后是參數(shù)。堆一般用堆的頭部用一個(gè)字節(jié)存放堆的大小,便于delete或者free

對(duì)于如下函數(shù):

[cpp] view plaincopyprint?

1.void fun(int param1,int param2,int param3)

2.{

3. int var1=param1;

4. int var2=param2;

5. int var3=param3;

6. {

7.

8. other code;

9.

10. }

11.}

void fun(int param1,int param2,int param3){ int var1=param1; int var2=param2; int var3=param3; { other code; }}當(dāng)調(diào)用函數(shù)時(shí),棧是從高地址向低地址分布,EBP是棧底指針,ESP是棧頂指針,參數(shù)從右往左入棧,先壓param3,然后是param2,最后是param3,然后是函數(shù)的返回地址入棧,進(jìn)入函數(shù)后函數(shù)地址入棧,EBP入棧,然后把ESP值給EBP,再接著是局部變量入棧,即var1入棧,var2入棧,var3入棧,按照聲明的順序存放在EBP-4,EBP-8,EBP-12的位置

函數(shù)調(diào)用小結(jié):調(diào)用一個(gè)函數(shù)時(shí),先將堆棧原先的基址(EBP)入棧,以保存之前任務(wù)的信息。然后將棧頂指針的值賦給EBP,將之前的棧頂作為新的基址(棧底),然后再這個(gè)基址上開(kāi)辟相應(yīng)的空間用作被調(diào)用函數(shù)的堆棧。函數(shù)返回后,從EBP中可取出之前的ESP值,使棧頂恢復(fù)函數(shù)調(diào)用前的位置;再?gòu)幕謴?fù)后的棧頂可彈出之前的EBP值(已入棧),因?yàn)檫@個(gè)值在函數(shù)調(diào)用前一步被壓入堆棧。這樣,EBP和ESP就都恢復(fù)了調(diào)用前的位置,堆棧恢復(fù)函數(shù)調(diào)用前的狀態(tài)。查看原文

總結(jié)

以上是生活随笔為你收集整理的php loop 语法,Loop - SegmentFault 思否的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。