假设我有一个类,类似下面的代码:
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”指针是隐式参数而不是任何存储的内容,但是否还有其他隐藏的问题需要注意吗?
编辑:
根据sharptooths的评论,数据不包括任何句柄或类似的引用信息。根据Paul R的评论,我已经分析了代码,并且在这种情况下避免使用复制构造函数可以提高大约4.5倍的速度。部分原因是我的模板数组类比给出的简单示例要复杂得多,并且在为不允许浅层复制的类型分配内存时调用放置“new”。这实际上意味着除了复制构造函数之外,还会调用默认构造函数。 第二次编辑: 也许值得指出的是,我完全接受以这种方式使用memcpy是不好的做法,并且在一般情况下应该避免。它被用作高性能模板数组类的一部分,其中包括参数“AllowShallowCopying”,该参数将调用memcpy而不是复制构造函数。这对于类似从数组开始附近删除元素和分页数据进出辅助存储等操作具有重大的性能影响。更好的理论解决方案是将类转换为简单结构,但是考虑到这需要大量重构大型代码库,我不想这样做。