gpt4 book ai didi

c++ - 较大的对象复制速度是否较慢(C++)?

转载 作者:行者123 更新时间:2023-11-30 02:42:47 32 4
gpt4 key购买 nike

如果你想在 C++ 中复制一个对象(在堆栈上),复制更大的对象是否更慢?是立即复制对象,还是以迭代方式复制数据字节?:

class Small {
public:
int stuff[32];
};

class Big {
public:
int stuff[1024];
};

...

Small small;
Big big;

Small small2 = Small(small); //Faster?
Big big2 = Big(big); //Slower?

抱歉,目前我没有时间测试它。

最佳答案

是的,较大的对象比较小的对象需要更多的时间来复制或移动。

一个包含 32 个整数的数组需要 32 次复制或移动操作。
一个包含 1024 个整数的数组需要 1024 次复制或移动操作。

问题是时差是否显着。对于现代处理器,大多数复制操作都在纳秒级。那么,(大约)1000 纳秒会影响您的程序吗?这取决于。如果您的程序花费数毫秒或更多时间等待 I/O,则差异可能并不显着。

编辑 1:
所需的空间量可能比复制所花费的时间更重要。

大对象的一般经验法则是让它们坐下并传递指向对象的指针;避免复制或移动大对象。与大型对象相比,指针占用的空间更小,复制和移动速度更快。也更喜欢对指针的引用。

编辑 2:- 堆栈
复制到堆栈 取决于处理器和编译器的协议(protocol)。堆栈不是必需的。

在使用堆栈传递参数和局部变量分配的经典实现中,除了复制对象之外,开销还涉及递增堆栈指针变量。

所以,如果我将 32 个整数传递给一个函数,将有 32 个复制操作加上一个对堆栈指针的加法操作。

一般而言,堆栈空间的关注比将大对象压入(复制)到堆栈所需的时间更为重要。

根据优化级别和其他属性,您的编译器可能能够通过指针传递您的对象。

关于c++ - 较大的对象复制速度是否较慢(C++)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26792602/

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