c++ 智能指针_C++智能指针对程序文件大小的影响

引入了智能指针可以解决了C++里的各种资源泄漏问题。但我发现我写的程序代码编译出来的文件都较原来的文件大。

于是我想做一个实验,看智能指针会带来多大的文件体积开销。

于是做了个对比实验:

raw_ptr.cpp

#include 

smart_ptr.cpp

#include 

empty.cpp

#include 

Makefile

all:
    g++ -o raw_ptr raw_ptr.cpp -O2
    g++ -o smart_ptr smart_ptr.cpp -O2
    g++ -o empty empty.cpp -O2
    strip raw_ptr
    strip smart_ptr
    strip empty

编译得到的结果:

0cf3e0a136de47cbd7313d95dbf754fc.png

empty 是什么功能都没有,编译它是为了比较出,raw_ptr.cpp 中应用程序代码所占有空间。

将 raw_ptr 与 smart_ptr 都减去 empty 的大小:

  • raw_ptr 4192B
  • smart_ptr 8360B

而 smart_ptr 比 raw_ptr 多出 4168B,这多出来的就是使用智能指针的开销。

目前来看,智能指针额外占用了一倍的程序空间。它们之间的关系是呈倍数增长,还是别的一个关系?

那么引入智能指针是哪些地方的开销呢?

大概有:

  • 类模板 shared_ptr<T>, weak_ptr<T> 为每个类型生成的类。
  • 代码逻辑中对智能指针的操作。

第一项是可预算的,有多少个类,其占用的空间是可预知的。而第二项,是很不好把控,对指针对象访问越多越占空间。

以 mqtt_client 做对比实验

如下为不使用智能指针编译时 -Os -O2,最后 strip 后的结果:

7e49eade74fc7149b386bfb0ef8bfa06.png

如果为使用智能指针编译后的结果:

ed38e61eb4154841b3e1c16130526139.png

可以看出,多出了:78K,大概多出整体代码逻辑的一半。

总结:

使用智能指针的代价会使程序的体积多出一半。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值