日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

php loop 语法,Loop - SegmentFault 思否

發布時間:2024/9/3 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php loop 语法,Loop - SegmentFault 思否 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在進行C/C++編程時需要程序員對內存的了解比較精確,經常使用到的內存有以下幾種:

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

全局區(靜態區):全局變量和靜態變量的存儲時放在一塊的,初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和靜態變量在一塊區域,程序結束后由系統釋放

文字常量區:常量字符串

程序代碼區:程序的二進制代碼

用代碼解析:

[cpp] view plaincopyprint?

1.int a=0;//全局初始化區

2.char p1;//全局未初始化區

3.main()

4.{

5. int b;//棧

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

7. char *p2;//棧

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

9.

10. static int c=0;//全局初始化區

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

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

13.}

14.

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

1,棧由系統自動分配和釋放,堆由程序員申請并釋放

2,只要棧的剩余空間大于所申請的空間,系統就分配,否則,報異常

對于堆,操作系統有一個記錄空閑內存地址的鏈表,當系統收到申請時,會遍歷該鏈表,尋找第一個空間大于所申請空間的堆節點,然后將該節點從空閑區鏈表中刪除,將該節點的空間分配給程序,若是找到的節點地址空間大于申請的大小,系統會把剩余的節點空間重新添加到內存空閑區鏈表中3,對與棧,在window下,棧是向低地址擴展的數據結構,是一塊連續的區域,棧的大小事2MB,如果申請的空間超過棧的剩余空間,將提示棧溢出

對與堆,是向高地址擴展的數據結構,且不連續,堆的大小受限于計算機系統的虛擬內存,堆獲得的空間比較大,也比較靈活4,申請效率,棧由系統分配,速度快,程序員無法控制。堆由程序員分配,速度慢,容易產生碎片,用起來方便

5,內容,棧在函數調用時,參數由右往左入棧,然后是局部變量,靜態變量不入棧 出棧時,局部變量先出棧,然后是參數。堆一般用堆的頭部用一個字節存放堆的大小,便于delete或者free

對于如下函數:

[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; }}當調用函數時,棧是從高地址向低地址分布,EBP是棧底指針,ESP是棧頂指針,參數從右往左入棧,先壓param3,然后是param2,最后是param3,然后是函數的返回地址入棧,進入函數后函數地址入棧,EBP入棧,然后把ESP值給EBP,再接著是局部變量入棧,即var1入棧,var2入棧,var3入棧,按照聲明的順序存放在EBP-4,EBP-8,EBP-12的位置

函數調用小結:調用一個函數時,先將堆棧原先的基址(EBP)入棧,以保存之前任務的信息。然后將棧頂指針的值賦給EBP,將之前的棧頂作為新的基址(棧底),然后再這個基址上開辟相應的空間用作被調用函數的堆棧。函數返回后,從EBP中可取出之前的ESP值,使棧頂恢復函數調用前的位置;再從恢復后的棧頂可彈出之前的EBP值(已入棧),因為這個值在函數調用前一步被壓入堆棧。這樣,EBP和ESP就都恢復了調用前的位置,堆棧恢復函數調用前的狀態。查看原文

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。