程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c#內存管理.(3)

c#內存管理.(3)

編輯:關於C語言

參數

當我們開始調用一個方法的時候,發生了什麼呢?

1.在棧中分配我們方法所需的空間,包括回調的指針空間,該指針通過一條goto指令來回到函數調用開始的那個棧位置的下一個位置,以便繼續執行。

2.我們方法的參數將被拷貝過來。

3.控制器通過JIT方法和線程開始執行代碼,因此我們有了另外一個稱呼叫調棧。

代碼如下:

public int AddFive(int pValue){
        int result;
        result = pValue + 5;
        return result;
}

棧的結構模式:參數在棧中的位置取決於它的類型,值類型本身被拷貝而引用類型的引用被拷貝。 傳遞值類型參數

當我們傳遞一個值類型參數時,內存先被分配然後是值被拷貝到棧中。代碼如下:

class Class1 {
  public void Go () {
    int x = 5;
    AddFive(x);
    Console.WriteLine(x.ToString());
  }
  public int AddFive (int pValue) {
    pValue += 5;
    return pValue;
  }
}

AddFive方法被執行,x位置變成5當AddFive()方法執行結束後,線程回到執行go方法,pValue將被刪除。所以當我們在傳遞一個很大的值類型的時候,程序會逐位的拷貝到棧中,這很明顯就是效率很低。更何況我們的程序如果要傳遞這個值數千次的進行,那麼效率就更低。這時我們就要用到引用類型來解決這樣的問題。

public void Go() {
MyStruct x = new MyStruct();
DOSomething(ref x);
}
public struct MyStruct {
  long a, b, c, d, e, f, g, h, i, j, k, l, m;
}
public void DOSomething(ref MyStruct pValue) {
    // DO SOMETHING HERE....
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved