将memcpy与Eigen类型的向量一起使用安全吗

Is it safe to use memcpy with vectors of Eigen types?

本文关键字:一起 安全 向量 memcpy Eigen 类型      更新时间:2023-10-16

我有一个程序,可以在内部将点云处理为特征对象的向量:

std::vector<Eigen::Vector3f> point_cloud;

此程序需要将这些点云转换为不同的格式以进行序列化。这是另一种类型的格式:

struct Point32 {
  float x;
  float y;
  float z;
};
std::vector<Point32> point_cloud_other;

问题是,在x86/x8_64计算机上使用memcpy在特征点云上进行复制是否保证安全?我所说的"安全"是指数据的完整性。也就是说,在不损坏点云的情况下这样做安全吗:

point_cloud_other.resize(point_cloud.size());
memcpy(point_cloud_other.data(), point_cloud.data(), 
       point_cloud.size() * sizeof(Eigen::Vector3f));

STL矢量类保证其数据将存储在单个连续数组中,因此只要要复制到的矢量至少与要复制的矢量一样大,memcpy()就应该是安全的。

也就是说,使用向量方法或运算符来做你想做的事情会更好,也更不容易出错,而不是试图用memcpy()"背后"。如果你希望memcpy()能表现得更好,我想你会发现它没有任何区别(尽管你可以通过测量来验证这一点)。