gpt4 book ai didi

c++ - 在成员函数中保留对对象本身的引用

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:42 24 4
gpt4 key购买 nike

就节省时间和减少操作次数而言,在使用 this-> 的成员函数的开头创建对 (*this) 的引用是否有用 是循环的吗?编译器(我最感兴趣的是 gcc)是否已经为我优化了?有什么理由不这样做吗?

例子:

void A::checkBytes( const byte * dataChunk, uint32_t chunkSize )
{
A & self = (*this);
bool UTF8Valid = self.InvalidSequences & 1;
byte current, expectedUTF8Bytes = 0;
for (uint32_t i = 0; i < chunkSize; i++)
{
current = dataChunk[i];

// many tests with 'current' and 'this->InvalidSequences'

self.Count[current]++;
self.ChunkSize++;
}
if (!UTF8Valid) self.InvalidSequences |= 1;
}

我知道每个非静态成员函数都有自己隐藏的this。我知道我将同时拥有隐藏的 A * thisA & self。我不知道许多 this->someMember 是否会比许多 referenceToThis.someMember 花费更多,或者根本没有。

最佳答案

没有。最坏的情况是它会消耗额外的堆栈空间并需要一些额外的指令,最好的情况是它会优化回 this->

this 几乎肯定会在可能的情况下存在于寄存器中,而像 A& 这样的引用基本上是实现级别的指针。

尝试存储对 this->Count 等的直接指针/引用可能甚至没有好处,因为在大多数平台上 this->Count[n] 可以是单个指令(例如,在 x86 上,我相信 LEA 将被使用,您可以检查反汇编)。

关于c++ - 在成员函数中保留对对象本身的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55725625/

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