C 憤恨者札記5 臨時變數的記憶體分配

2021-08-27 06:10:53 字數 809 閱讀 5049

這裡考慮物件做為函式引數與返回值時,使用無名臨時變數的情況。

臨時變數記憶體分配

class node

};void fn1( node n )

node fn2()

void main()

呼叫fn1

時的反彙編結果:

結論是:臨時變數的記憶體來自於函式的呼叫者

修改臨時變數的值

fn1的引數並不是臨時變數本身,而是由臨時變數填充,在

fn1內部無法對其變數。而

fn2傳入的是臨時變數指標,可以在

fn2內外對其進行修改,下面是實驗**:

static int gtemp = 0;

class node

else

this->data++;

}};node fn2()

void main()

__asm int 3

}

C 憤恨者札記5 臨時變數的記憶體分配

這裡考慮物件做為函式引數與返回值時,使用無名臨時變數的情況。臨時變數記憶體分配 class node void fn1 node n node fn2 void main 呼叫fn1 時的反彙編結果 結論是 臨時變數的記憶體來自於函式的呼叫者 修改臨時變數的值 fn1的引數並不是臨時變數本身,而是由...

C 臨時變數的生命週期

c 中的臨時變數指的是那些由編譯器根據需要在棧上產生的,沒有名字的變數。主要的用途主要有兩類 string proc int main 其中第 6 行會產生乙個臨時變數。但並不是所有返回值都會建立臨時變數,只有當沒有將返回值賦值給其它變數時,臨時變數才會建立。這種臨時變數的生命週期很短,當表示式完成...

C 臨時變數的生命週期

c 中的臨時變數指的是那些由編譯器根據需要在棧上產生的,沒有名字的變數。主要的用途主要有兩類 1 函式的返回值,如 1 string proc 25 6int main 7其中第 8 行會產生乙個臨時變數。但並不是所有返回值都會建立臨時變數,只有當沒有將返回值賦值給其它變數時,臨時變數才會建立。這種...