临时变量的内存分配
这里考虑对象做为函数参数与返回值时,使用无名临时变量的情况。
临时变量内存分配
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
}
调用Fn1时的反汇编结果:
Fn2相关反汇编结果:
结论是:临时变量的内存来自于函数的调用者
修改临时变量的值
Fn1的参数并不是临时变量本身,而是由临时变量填充,在Fn1内部无法对其变量。而Fn2传入的是临时变量指针,可以在Fn2内外对其进行修改,下面是实验代码:
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
}
分享到:
相关推荐
C++中的雷区——C++内存管理详解C++中的雷区——C++内存管理详解C++中的雷区——C++内存管理详解C++中的雷区——C++内存管理详解
C_C++语言硬件程序设计——基于TMS320C5000系列DSP
c++实现的 可保存的 mfc 程序 ————————————
斐波那契数列c++实现(csdn)————程序
C++ Builder 5程序设计——数据库应用实务篇
《C++Builder5程序设计——数据库应用实务篇》程序源代码
小李发奖金(c++)(csdn)————程序
测试一:学生信息的输入和输出都正常,但是查找、删除和修改时都只能对第一个数据进行操作,如下图所示: C++课程设计-单链表——学生信息管理系统全文共9页,当前为第5页。 但是当要进行查找、删除、修改操作时,...
《C++Builder5程序设计——基础教学篇》程序源代码1
前序创建二叉树c++(csdn)————程序
从操作系统底层 深入解析C++中的临时变量
子序列和 c++ dfs(csdn)————程序
第一个c++程序(csdn)————程序
【leetcode】斐波那契数 c++(csdn)————程序
YoloX之TensorRT加速(windows)(webcam)(C++)(csdn)————程序
火柴棒游戏(暴力枚举)C++(csdn)————程序
C++Builder程序设计范例——中国象棋
C_C++_Java_Python——API
P1067 [NOIP2009 普及组] 多项式输出(c++)(csdn)————程序