将memcpy与Eigen类型的向量一起使用安全吗
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;
问题是,在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()能表现得更好,我想你会发现它没有任何区别(尽管你可以通过测量来验证这一点)。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 虚拟决赛作为安全
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- C++中的线程安全删除
- 如何将C++中的库和头与MinGW一起使用
- 通过网络、跨平台传递std::变体是否安全
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 将memcpy与Eigen类型的向量一起使用安全吗
- Malloc与nogil一起使用安全吗
- 将负整数与size_t一起使用是否安全
- std::bind和boost::signals2一起使用安全吗?
- 与QProcess一起使用QTemporaryFile是否安全?
- 将`basename`与__FILE__一起使用安全吗