假设我有一堂课,如下所示;
class MyClass
{
public:
MyClass();
int a,b,c;
double x,y,z;
};
#define PageSize 1000000
MyClass Array1[PageSize],Array2[PageSize];
如果我的类没有指针或虚方法,使用以下内容是否安全?
memcpy(Array1,Array2,PageSize*sizeof(MyClass));
我问的原因是,我正在处理非常大的分页数据集合,如此处所述,其中性能至关重要,而 memcpy 提供了比迭代分配显着的性能优势。我怀疑应该没问题,因为“this”指针是一个隐式参数,而不是任何存储的参数,但是我应该注意其他隐藏的问题吗?
编辑:
根据尖牙评论,数据不包括任何句柄或类似的参考信息。
根据 Paul R 的评论,我已经分析了代码,在这种情况下,避免复制构造函数的速度大约快 4.5 倍。这里的部分原因是我的模板化数组类比给定的简单示例要复杂一些,并且在为不允许浅复制的类型分配内存时调用放置“新”。这实际上意味着调用默认构造函数以及复制构造函数。
第二次编辑
或许值得指出的是,我完全接受以这种方式使用 memcpy 是不好的做法,在一般情况下应避免使用。使用它的具体情况是作为高性能模板化数组类的一部分,其中包括一个参数“AllowShallowCopying”,它将调用 memcpy 而不是复制构造函数。这对诸如删除数组开头附近的元素以及将数据分页进出辅助存储等操作具有很大的性能影响。更好的理论解决方案是将类转换为简单的结构,但考虑到这涉及对大型代码库的大量重构,避免它不是我热衷于做的事情。