gpt4 book ai didi

c++ - 以这种方式使用 memcpy() 是不好的做法吗?

转载 作者:行者123 更新时间:2023-12-03 07:00:41 28 4
gpt4 key购买 nike

我正在处理数组并试图找到对数据执行操作的有效方法。
最后添加值很容易,但将数据移回或更多索引有缺点。我可能会创建一个具有足够空间的新数组,并从移位索引开始复制数据,然后删除原始数据并交换指针,但我认为这种方法内存效率低下。
我最终在数组本身上使用 memcpy() 时绊倒了,假设其中有空间用于转换并且它运行良好,但是我担心它不正确,或者如果我只是不自觉地做同样的事情。
我的代码看起来像这样

const int size = 25, buffer = 25;

int num[size+buffer]{};
initialize(num, size);


cout << "Values:" << endl;
print(num, size+buffer);
cout << endl << endl;

memcpy( &(num[size]), num, sizeof(int) * size );

cout << "Values:" << endl;
print(num, size + buffer);
cout << endl << endl;
initialize 是一个从文件中赋值的函数,它是一个简单的 for 循环;
通过第二个打印函数,数组保存了两个值的拷贝。如果一切正常,我正在考虑将它转移到新值所需的数量,然后将它们插入那里。看起来干净,快速,希望内存有效。
我将不胜感激任何反馈。

最佳答案

您可能可以通过使用 std::deque 更有效地实现它,该 std::deque 已优化为允许在开头和结尾插入和删除项目。
https://en.cppreference.com/w/cpp/container/deque
虽然我们可以在算法等方面消失在 bolt 孔中,但您的问题的核心是, “这是否被认为是不好的做法” .答案显然是"is";现代哲学是编写“富有表现力的代码”。如果您认为富有表现力的代码可能效率低下,并且“接近金属是最好的”,请查看 Matt Godbolt 在 2017 年 CppCon 上关于编译器为您做了多少优化的演讲。信息很明确;不要写“聪明的优化代码”,只要清楚表达源代码的意图,让编译器为你做优化:
https://www.youtube.com/watch?v=bSkpMdDe4g4
另外要考虑的是,很多算法都是按照Big O Notation排名的。 ,这意味着永远不应该使用一些低效的算法。然而,一些所谓的低效算法在locality of reference方面更好。 ;特别是如果您使用适合缓存行的少量数据。链表很可能会在内存中跳转,导致缓存未命中。查看此演示文稿:https://www.youtube.com/watch?v=fHNmRkzxHWs
正如评论中所建议的,还可以查看以下有关数据结构的视频(此链接跳过前 8 分钟,因为它们不重要):
https://youtu.be/4IrUAqYKjIA?t=525

关于c++ - 以这种方式使用 memcpy() 是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63908897/

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