c++ - 如何正确复制内存缓冲区?
问题描述
在进行更改之前,我需要复制缓冲区(用于撤消状态)。因此,经典代码如下所示:
byte *buf = NULL;
byte *oldbuf = NULL;
buf = new byte[100];
//do something with buf
//Here I need to copy "buf" to "oldbuf"
oldbuf = new byte[100];
memcpy(oldbuf, buf, 100);
delete[]buf;
buf = new byte[50];
//next do some with buf
它工作正常,但需要一些时间来“memcpy”。我可以通过传递指针复制缓冲区吗?有人这样想?:
byte *buf = NULL;
byte *oldbuf = NULL;
buf = new byte[100];
//do something with buf
//Here I need to copy "buf" to "oldbuf"
oldbuf = buf;
buf = new byte[50];
//next do some with buf
解决方案
在进行更改之前,我需要复制缓冲区(用于撤消状态)。因此,经典代码如下所示: ...
不,使用的经典 c++ 代码看起来像
std::vector<byte> buf(100);
//do something with buf
//Here I need to copy "buf" to "oldbuf"
std::vector<byte> oldbuf = buf;
buf = std::vector<byte>(50);
//next do some with buf
这甚至在第一个 c++ 标准发布之前就已经开始工作了。
当然std::vector<byte> oldbuf = buf;
涉及到按顺序复制内容,这需要一些时间。如果使用硬件功能有任何优化可以做到这一点,你应该相信编译器会发出必要的指令来做到这一点。
对于当前的 c++ 标准,您可以使用它std::move()
来避免复制原始文件buf
:
std::vector<byte> oldbuf = std::move(buf);
buf = std::vector<byte>(50);
推荐阅读
- python - 重塑表格以获取每个唯一值的频率
- java - 类不可访问中定义的方法
- python - 即使有主循环,tk 窗口也不会显示
- javascript - Vuejs 的意义何在
? - go - 如何在 Go 中获取结构的方法列表?
- amazon-web-services - 使用 AWS 基础设施为静态网站实施数据搜索系统的建议
- linux - 如何通过系统调用获取 CPU MHz(在 /proc/cpuinfo 中)?
- java - 如何执行原生查询并获得反馈?
- java-8 - 克隆 javax.mail.Message 和克隆 javax.mail.Multipart,Java 8
- r - RStudio Amazon EC2 实例磁盘空间不足