我实现的网络库中使用了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效率比较相关推荐

  1. C++新特性探究(18.1):C++11 shared_ptr智能指针

      在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃.程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的.比如:   有些内存资源已经被释放,但指向它的 ...

  2. c++11 shared_ptr 与 make_shared源码剖析

    写在最前... 请支持原创~~ 0. 前言 所谓智能指针,可以从字面上理解为"智能"的指针.具体来讲,智能指针和普通指针的用法是相似的,不同之处在于,智能指针可以在适当时机自动释放 ...

  3. [C++11]shared_ptr共享智能指针的初始化与使用

    使用智能指针需要添加头文件: 代码如下: #include <memory> shared_ptr使用的注意事项: 1.不能使用一个原始地址初始化多个共享智能指针 2.函数不能返回管理了t ...

  4. C++11 智能指针之shared_ptr

    0.Overview 在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃.程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的.比如: 有些内存资源已经被释 ...

  5. C++ 智能指针 :内存泄漏、 RAII、智能指针、auto_ptr、unique_ptr、shared_ptr、weak_ptr、定制删除器deleter

    文章目录 内存泄漏 什么是内存泄漏 内存泄漏的危害: 如何避免内存泄漏 RAII 智能指针 auto_ptr unique_ptr shared_ptr 循环引用问题 weak_ptr 定制删除器 内 ...

  6. C++11、C++14、C++17、C++20新特性总结(5万字详解)

    文章目录 C++ 11是什么,C++ 11标准的由来 C++ auto类型推导完全攻略 auto 类型推导的语法和规则 auto 的高级用法 auto 的限制 auto 的应用 使用 auto 定义迭 ...

  7. get方法报空指针_智能指针shared_ptr踩坑笔记

    平时写代码一直避免使用指针,但在某些场景下指针的使用还是有必要的.最近在项目中简单使用了一下智能指针(shared_ptr),结果踩了不少坑,差点就爬不出来了.痛定思痛抱着<Cpp Primer ...

  8. 成长为架构师途中的11个谣言(附能力模型)

    点击"技术领导力"关注∆  每天早上8:30推送 古人云:"活到老,学到老."互联网算是最辛苦的行业之一,"加班"对工程师来说已是" ...

  9. 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 ...

最新文章

  1. 意大利物联网技术发展现状
  2. 关于Apache不能解析html内容
  3. python之发送HTML内容的邮件
  4. Java中有哪些无锁技术来解决并发问题?如何使用?
  5. ARM 之十 ARMCC(Keil) map 文件(映射文件)详解
  6. 自定义背景android,Android自定义Button并设置不同背景图片的方法
  7. node服务成长之路
  8. Java 的Tuple(类似.net等的元组)
  9. LeetCode 266. 回文排列(计数)
  10. python 绘制时频图 plt.specgram
  11. 拥抱创新,持续探索——对话阿里云MVP胡逢法
  12. sqlite事务模型、性能优化tips、常见误区
  13. 哪里有2003系统服务器,服务器2003系统
  14. Java线程volatile(二)
  15. Sun 解决方案大会归来
  16. linux kvm装ghost镜像,kvm安装win7虚拟机
  17. Redis雪崩和Redis穿透
  18. 【语义分割】Smoothed Dilated Convolutions for Improved Dense Prediction阅读笔记
  19. 超参数自动优化方法PBT(Population Based Training)
  20. ICP经营许可证与ICP备案有什么区别?

热门文章

  1. STM32 解析futaba S-bus协议
  2. ARM开发板上iconv调用失败的解决方法
  3. 二元树中和为某一值的所有路径
  4. C#反射之Assembly.Load,Assembly.LoadFile 与 Assembly.LoadFrom方法介绍
  5. Win7下提取加密PDF文件(pdf加密成exe)
  6. opencv中查看mat位图的像素幅度(Cv::matStep)
  7. MFC动态按钮的创建及其消息响应 和 自定义消息
  8. c++ 如何获取系统时间
  9. c++中为什么父类名可以直接调用自己的非静态函数测试例子!(父类名::非静态函数)
  10. hashmap中的key是有序的么_HashMap?面试?我是谁?我在哪