gpt4 book ai didi

c++ - 数组 (C++) : why use pointers over direct manipulation?

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

我非常了解指针,并且了解它们的很多用途。但是,我一直没有弄清楚数组中指针的使用。我知道该怎么做,但我不明白为什么要在直接操作数组时使用它。我只想知道我只能使用数组中的指针来做的事情。谢谢。

最佳答案

考虑:

struct Match {
int scores[30];
char names[30][64];
int ages[30];
char description[1024];
};

这个结构有 3184 字节长。

Match matches[16];

如果我决定 matches[0] 和 matches[1] 需要交换,则交换两者涉及要完成的以下工作(这就是 std::swap 的实现方式):

Match temp; // prepare 3184 bytes on the stack.
temp = matches[0]; // copy 3184 bytes
matches[0] = matches[1]; // copy 3184 bytes
matches[1] = temp; // copy 3184 bytes

那是复制/移动数据的大量 CPU 周期。

如果我使用指针:

Match* matches[16];
for (size_t i = 0; i < 16; ++i) {
mathces[i] = new Match;
}

所有 std::swap 所要做的就是交换两个指针:

Match* temp = matches[0]; // 4 or 8 bytes
matches[0] = matches[1]; // 4 or 8 bytes
matches[1] = temp; // 4 or 8 bytes

更简洁,并且在优化时,这可能可以在寄存器中完成以获得极致性能。

这样做的另一个好处是节省内存。我可以有一个包含 1,000,000 个匹配指针的数组,它占用 4Mb 或 8Mb(取决于 32/64 位),其中许多可以是 nullptr。我只需要指向当前有用的条目的指针。

1,000,000 个匹配对象的数组需要 3Gbs 的内存。

相反,如果所有 1,000,000 个指针都必须指向一个唯一的 Match 对象实例,那么您将拥有约 3Gb 的对象加上约 1Mb 的指针。

关于c++ - 数组 (C++) : why use pointers over direct manipulation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19757255/

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