首页 > 解决方案 > 如何正确复制内存缓冲区?

问题描述

在进行更改之前,我需要复制缓冲区(用于撤消状态)。因此,经典代码如下所示:

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++memorymemcpy

解决方案


在进行更改之前,我需要复制缓冲区(用于撤消状态)。因此,经典代码如下所示: ...

不,使用的经典 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);

推荐阅读