张雪鹏23_11_13 关于内存所有权转让以及右值引用的修改

关于内存所有权转让以及右值引用的修改

背景:在TUM dynamic数据集下,当前算法与22年出现的同类算法,在精度持平的情况下,运行速度及内存占有量方面有明显的不足。

解决方法:在原理暂时无法突破的情况下执行代码层面的优化

代码层面优化间述:

1.将基于拷贝的方法转换成基于内存所有权转让的方法

2.使用右值引用解决函数返回值的内存所有权转让的问题

什么是左值和右值

int a = 1;
int b = a;

在c中左值一般是一个指向特定内存的值,有一个相对稳定的内存地址,有一段较长的ttl,右值则是不指向稳定内存地址的匿名值,通常是暂时性的

&1

lvalue required as unary ‘&’ operand

Vector2d EdgeSE3ProjectXYZ::cam_project(const Vector3d & trans_xyz)   

函数的返回值是临时变量是一个右值

平时我们如何留下这个临时变量呢?

Vector2d myvector = cam_project(trans_xyz);

这个等于号重载的就是一个基于拷贝的方法

Vector2d operator = (const Vector2d& b) //右 拷贝
Vector2d operator = (Vector2d& b)//左 转让

右值引用为了解决这个问题被提出

Vector2d oeperator = (Vector2d&& b)

image-20231113113029164

std::move仅仅将实参类型转为右值引用,使得发生移动拷贝或移动赋值行为,这要求实参对应的类型实现了移动构造函数或移动赋值函数,否则编译错误

slam算法的数据交互是非常频繁的,使用这种内存所有权转让的代码优化方法加速是非常明显的,可惜的是代码层面上的优化不能作为创新点,对于右值引用的方法,最新的GIThub上

的某些开源代码,也已经开始使用,也是我发现这种方法的来源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值