注意!C++值传递对内存进行全拷贝!

2018-01-11 12:46:36来源:网络收集作者:咖啡不加糖人点击

分享

阿里云爆款

       很多刚学C++的程序员写代码时,不会特别注意函数参数的传递方式,对CString等类型参数会直接使用值传递的方式,下面我们通过一段代码验证下值传递对程序内存及性能的影响。


        为了能直观的看到对比结果,我们分别以std::list和CSimpleArray举例,源代码及内存情况如下:


【std::list】


注意!C++值传递对内存进行全拷贝!


【CSimpleArray】


注意!C++值传递对内存进行全拷贝!


       通过对比图可以看到,std::list在进入函数时会对list内所有节点进行全拷贝,内存直接增长一倍,同时由于内存拷贝需要消耗一定时间,进入函数时卡顿较长时间。


        CSimpleArray经过了一定优化,首次进入函数时没有进行拷贝,读取也不会重新拷贝,但在写入值时,会进行拷贝。


       通过上述代码可以看出,函数值拷贝会极大的占用内存,同时消耗性能,如果程序中存在大量值拷贝过程,程序的瞬时内存会非常大,同时程序执行效率会非常低。


总结

        各位初学C++的小伙伴要注意了,熟练使用不同的传递方式是很重要的,同时,做程序性能优化时,可以首先检查函数的参数传递方式,说不定是一个无脑提高程序性能的一个方式。


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台