gpt4 book ai didi

C++:什么是技术层面的 R 值引用 (ASM)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:47 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
What is the difference between r-value references and l-value references? (CodeGen)

我想知道,谁能从技术层面解释一下 R 值引用是什么?我的意思是:创建 R 值引用时在汇编程序级别会发生什么。

为了进行小测试以查看内部发生的情况,我编写了以下代码:

char c = 255;
char &c2 = c;
char &c3 = std::move(c);

我知道创建对“c”的 R 值引用是没有意义的,但只是为了测试我还是做了,看看它做了什么。结果如下:

unsigned char c = 255;
mov byte ptr [c],0FFh
unsigned char &c2 = c;
lea eax,[c]
mov dword ptr [c2],eax
unsigned char &&c3 = std::move(c);
lea eax,[c]
push eax
call std::move<unsigned char &> (0ED1235h)
add esp,4
mov dword ptr [c3],eax

到目前为止,我不是 asm 专家,但在我看来,在这种情况下,“c3”最后是对“c”的常规引用。

如果我将 R-Value 引用直接绑定(bind)到一个临时值 (char &&c3 = 255),则汇编程序的最后一位会这样更改:

unsigned char &&c3 = 255;
mov byte ptr [ebp-29h],0FFh
lea eax,[ebp-29h]
mov dword ptr [c3],eax

从这个变化来看,我假设 c3 实际上仍然是对某个内存位置的引用,其中包含值 255。因此它是一个常规引用​​ - 该值不会复制/分配给 c3。这是真的吗?

谁能说我的假设是否正确,或者我是否完全偏离了轨道?直到现在,当涉及到调用解析时,我一直认为 R-Value 引用与函数/方法签名(可能是 move-ctor)相匹配,这样编码人员就知道如何处理提供的数据(对于 move-ctor那将是移动数据而不是复制数据)。

为了捍卫我刚刚提出的这个相当愚蠢的尝试:我不打算在 asm 级别上搞砸我的代码,我只是想了解 R-Value 引用引入的技术差异与其他所有引用文献相比这些年。

非常欢迎任何见解和解释!

谢谢!

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com