臨時(shí)變量的內(nèi)存分配
這里考慮對(duì)象做為函數(shù)參數(shù)與返回值時(shí),,使用無名臨時(shí)變量的情況,。
臨時(shí)變量?jī)?nèi)存分配
- class Node
- {
- public:
- int data1;
- int data2;
- int data3;
- Node()
- {__asm nop}
- };
-
- void Fn1( Node n )
- {
- n.data1++;
- }
-
- Node Fn2()
- {
- return Node();
- }
-
- void main()
- {
- __asm int 3
- Fn1( Node() );
- __asm int 3
- Fn2();
- __asm int 3
- }
調(diào)用Fn1時(shí)的反匯編結(jié)果:
Fn2相關(guān)反匯編結(jié)果:
結(jié)論是:臨時(shí)變量的內(nèi)存來自于函數(shù)的調(diào)用者
修改臨時(shí)變量的值
Fn1的參數(shù)并不是臨時(shí)變量本身,而是由臨時(shí)變量填充,,在Fn1內(nèi)部無法對(duì)其變量,。而Fn2傳入的是臨時(shí)變量指針,可以在Fn2內(nèi)外對(duì)其進(jìn)行修改,,下面是實(shí)驗(yàn)代碼:
- static int gTemp = 0;
- class Node
- {
- public:
- int data;
- Node()
- {
- if ( 0 == gTemp )
- {
- this->data = 0;
- gTemp++;
- }
- else
- this->data++;
- }
- };
-
- Node Fn2()
- {
- return Node();
- }
-
- void main()
- {
- Node* p = 0;
- __asm int 3
- while ( true )
- {
- p = &Fn2();
- p->data++;
- }
- __asm int 3
- }
|