【发布时间】:2018-08-15 21:16:55
【问题描述】:
将数据从 CameraSpacePoint 数组移动到 PointXYZ 数组的最佳方法是什么?
struct CameraSpacePoint
{
float X;
float Y;
float Z;
};
__declspec(align(16))
struct PointXYZ
{
float x;
float y;
float z;
};
constexpr int BIG_VAL = 1920 * 1080;
CameraSpacePoint camera_space_points[BIG_VAL];
PointXYZ points_xyz[BIG_VAL];
我的解决方案:
CameraSpacePoint* camera_space_points_ptr = &camera_space_points[0];
PointXYZ* points_xyz_ptr = &points_xyz[0];
for (int i = 0; i < BIG_VAL; ++i)
{
memcpy(points_xyz_ptr++, camera_space_points_ptr++, sizeof(CameraSpacePoint));
}
这是最有效的方法吗?
【问题讨论】:
-
只需使用
std::copy... -
@You:
std::copy需要从CameraSpacePoint转换为PointXYZ目前未提供... -
@You 它导致类型不匹配
-
如果这些点为了 SIMD 目的而对齐,这仍然是一个有点不幸的布局
-
@harold:我正在两个 API(Kinect SDK 2.0 和 PCL)之间创建一个适配器,并在这种情况下进行钳制
标签: c++ memory optimization