[C++11]shared_ptr效率比较
我实现的网络库中使用了C++11中的shared_ptr. 昨天做profile,发现很多CPU都消耗在shared_ptr上,所以打算看看shared_ptr的效率如何.
实验是这样的,弄一个临时的shared_ptr,然后不停的拷贝,拷贝100W次,看消耗多长时间.实验对象是gcc 4.6.2和clang 3.1(libc++).最后输出各自消耗的时间,编译选项,O0和O2.
上代码:
#include <thread> #include <memory> #include <unistd.h> #include <iostream> #include <sys/time.h>long GetMillionSecond() {timeval val;::gettimeofday(&val, NULL); return val.tv_sec * 1000 + val.tv_usec / 1000; }int main() { #ifdef THREADint terminal = false;std::thread t([&]{while(!terminal) ::usleep(1000*1000);}); #endiflong begin_time = GetMillionSecond();std::shared_ptr<int> p(new int);for(int i = 0; i < 100*10000; ++i){std::shared_ptr<int> a = p;*a = i;}long end_time = GetMillionSecond(); #ifdef THREADterminal = true;t.join(); #endifstd::cout << *p << std::endl;std::cout << end_time - begin_time << "ms" << std::endl;return 0; }
测试结果:
编译器/优化选项 | -O0(单位ms) | -O2(单位ms) |
clang | 44~49 | 37~39 |
clang thread | 40~49 | 31~39 |
gcc | 85~92 | 26~31 |
gcc thread | 87~92 | 28~33 |
不太清楚gcc 4.6.2的libstdc++里面有没有对单线程进行优化,4.7里面肯定优化了.明天在gcc 4.7上面再试试.
可以看到,开启优化选项,对两个实现,都有影响,gcc的优化能力还是比较强.
shared_ptr的效率还好.只是我当时服务器测试,没有开启优化选项,所以100W个消息,拷贝两三次的话,还是有一点吃紧.
PS:
gcc 4.7的优化,好像跟4.6没啥差别.....
[C++11]shared_ptr效率比较相关推荐
- C++新特性探究(18.1):C++11 shared_ptr智能指针
在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃.程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的.比如: 有些内存资源已经被释放,但指向它的 ...
- c++11 shared_ptr 与 make_shared源码剖析
写在最前... 请支持原创~~ 0. 前言 所谓智能指针,可以从字面上理解为"智能"的指针.具体来讲,智能指针和普通指针的用法是相似的,不同之处在于,智能指针可以在适当时机自动释放 ...
- [C++11]shared_ptr共享智能指针的初始化与使用
使用智能指针需要添加头文件: 代码如下: #include <memory> shared_ptr使用的注意事项: 1.不能使用一个原始地址初始化多个共享智能指针 2.函数不能返回管理了t ...
- C++11 智能指针之shared_ptr
0.Overview 在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃.程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的.比如: 有些内存资源已经被释 ...
- C++ 智能指针 :内存泄漏、 RAII、智能指针、auto_ptr、unique_ptr、shared_ptr、weak_ptr、定制删除器deleter
文章目录 内存泄漏 什么是内存泄漏 内存泄漏的危害: 如何避免内存泄漏 RAII 智能指针 auto_ptr unique_ptr shared_ptr 循环引用问题 weak_ptr 定制删除器 内 ...
- C++11、C++14、C++17、C++20新特性总结(5万字详解)
文章目录 C++ 11是什么,C++ 11标准的由来 C++ auto类型推导完全攻略 auto 类型推导的语法和规则 auto 的高级用法 auto 的限制 auto 的应用 使用 auto 定义迭 ...
- get方法报空指针_智能指针shared_ptr踩坑笔记
平时写代码一直避免使用指针,但在某些场景下指针的使用还是有必要的.最近在项目中简单使用了一下智能指针(shared_ptr),结果踩了不少坑,差点就爬不出来了.痛定思痛抱着<Cpp Primer ...
- 成长为架构师途中的11个谣言(附能力模型)
点击"技术领导力"关注∆ 每天早上8:30推送 古人云:"活到老,学到老."互联网算是最辛苦的行业之一,"加班"对工程师来说已是" ...
- C++智能指针详解(auto_ptr、unique_ptr、shared_ptr)
文章目录 1. 智能指针的应用场景 2. 智能指针的介绍 3. 智能指针的使用与原理 3.1 auto_ptr 3.2 unique_ptr 3.3 shared_ptr 3.4 shared_ptr ...
最新文章
- 意大利物联网技术发展现状
- 关于Apache不能解析html内容
- python之发送HTML内容的邮件
- Java中有哪些无锁技术来解决并发问题?如何使用?
- ARM 之十 ARMCC(Keil) map 文件(映射文件)详解
- 自定义背景android,Android自定义Button并设置不同背景图片的方法
- node服务成长之路
- Java 的Tuple(类似.net等的元组)
- LeetCode 266. 回文排列(计数)
- python 绘制时频图 plt.specgram
- 拥抱创新,持续探索——对话阿里云MVP胡逢法
- sqlite事务模型、性能优化tips、常见误区
- 哪里有2003系统服务器,服务器2003系统
- Java线程volatile(二)
- Sun 解决方案大会归来
- linux kvm装ghost镜像,kvm安装win7虚拟机
- Redis雪崩和Redis穿透
- 【语义分割】Smoothed Dilated Convolutions for Improved Dense Prediction阅读笔记
- 超参数自动优化方法PBT(Population Based Training)
- ICP经营许可证与ICP备案有什么区别?
热门文章
- STM32 解析futaba S-bus协议
- ARM开发板上iconv调用失败的解决方法
- 二元树中和为某一值的所有路径
- C#反射之Assembly.Load,Assembly.LoadFile 与 Assembly.LoadFrom方法介绍
- Win7下提取加密PDF文件(pdf加密成exe)
- opencv中查看mat位图的像素幅度(Cv::matStep)
- MFC动态按钮的创建及其消息响应 和 自定义消息
- c++ 如何获取系统时间
- c++中为什么父类名可以直接调用自己的非静态函数测试例子!(父类名::非静态函数)
- hashmap中的key是有序的么_HashMap?面试?我是谁?我在哪