C++智能指针之殇

指针-作为C/C++的标志性门槛理解起来确实是有难度的,而且指针也不容易管理,特别是动态申请的内存,一不小心就可能忘记释放,导致系统资源消耗越来越大(内存泄露),直至崩溃!
为此C++新标准中出现了智能指针,用智能指针封装真正的指针,本质上就是通过内部的引用计数来控制指针的释放:作用域增加则内部引用计数++,作用域结束则内部引用计数–,当引用计数==0时才真正释放该指针指向的内存。确实是很好的东西,使得开发人员不需要关心指针的管理,也避免了内存泄露,可谓一举两得。
但是任何技术都各有利弊,智能指针是牺牲了CPU性能为代价的,因为:任何函数调用都包含参数和返回地址入栈,函数调用完毕后的栈清理这一系列开销,而且对于引用计数的增减是必须要原子操作,否则在多线程中会有同步问题,原子操作一般都需要操作系统的支持,这将导致一次用户态到内核态的切换,这远比用户态下的函数调用的开销可大了很多很多倍。试想一下一个数据密集型的(准)实时系统中,高密度的指针传递将导致CPU时间片大量浪费在智能指针的引用计数的增减函数中,还要大量的用户态与内核态的切换(软中断),CPU真正执行系统功能的时间将会被延迟,甚至超时,导致实时系统的失败,这不是危言耸听。
因此成熟的C++开发人员和设计者们一定都具备成熟的管理指针的能力和经验,只有真正懂得,才能正确使用。

发布了19 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qman007/article/details/103956411