繁体   English   中英

将memcpy与本征类型的向量一起使用是否安全?

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

我有一个程序在内部将点云作为本征对象的向量处理:

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

该程序需要将这些点云转换为其他格式以进行序列化。 这是其他类型的格式:

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

问题是,使用memcpy在x86 / x86_64计算机上的本征点云上复制是否可以保证安全? “安全”是指数据的完整性。 也就是说,在不破坏点云的情况下这样做是否安全:

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()的性能更好,我想您会发现它没有任何区别(尽管您可以进行验证)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM