- 浏览: 680814 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (181)
- Matlab (16)
- Java (26)
- autoHotkey (4)
- openCV (1)
- C++ (50)
- PDF-XChange Viewer (2)
- 学术 (11)
- javascript (4)
- linux (11)
- SWT (9)
- latex (7)
- GAE (2)
- windows (6)
- C# (3)
- PS (20)
- JNI (4)
- latex,批处理 (0)
- 批处理 (4)
- Android (5)
- 矩阵论 (1)
- SVM (1)
- 概率图模型 (0)
- Python (12)
- Eigen (5)
- 编程题 (1)
- MKL (1)
- 神经网络 (9)
- 最优化 (2)
- 摄影 (1)
- PPT (0)
- After Effects (3)
- CUDA (3)
- caffe (0)
- MXNet (2)
- svn (1)
- R (0)
- 虚拟机 (0)
- tensorflow (7)
- theano (1)
- Keras (1)
- vim (1)
- xgboost (1)
- spark (6)
- eclipse (2)
- word2vec (0)
- hadoop (1)
- dmlc (1)
- git (0)
最新评论
-
jeffersonz:
请问大神,这个插件记录下来的脚本为什么不能再Extendscr ...
PhotoShop - 记录PS的所有操作为JavaScript代码 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道cherish ...
Eigen的编译选项;MKL的使用 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道 您好,您的工 ...
Eigen的编译选项;MKL的使用
C++中 直接调用、函数指针、std::function效率对比
调用次数:10亿次
CPU: i7 860 (主频2.8GHz)
测试结果: 函数指针要比直接调用慢2s左右;std::function 要比函数指针慢2s左右
貌似std::function调用时多了一句if语句的判断,用于测试是否绑定了函数。
结果及代码如下
调用次数:10亿次
CPU: i7 860 (主频2.8GHz)
测试结果: 函数指针要比直接调用慢2s左右;std::function 要比函数指针慢2s左右
貌似std::function调用时多了一句if语句的判断,用于测试是否绑定了函数。
结果及代码如下
/** @file @brief 测试C++11 中 function的效率 */ #include <functional> #include <iostream> #include <typeinfo> #include <chrono> //待封装的函数 int testEfficiency (int i, int j) { for (size_t ii = 0; ii < 5; ii++) { i += i - ii; } if (i < j) return i + 7 * j; else return i - 3 * j; } typedef std::function<int (int, int) > FuncInt_IntInt; using funcInt_IntInt = int (*) (int, int); //函数指针 int main() { int a = 1; int b = a; int c = a; int testNum = 1E9; FuncInt_IntInt fFunctional = testEfficiency; funcInt_IntInt fFuncPtr = testEfficiency; std::cout << "函数原型类型:\t\t" << typeid (testEfficiency).name() << std::endl; std::cout << "std::funciton类型:\t" << typeid (fFunctional).name() << std::endl; std::cout << "函数指针类型:\t\t" << typeid (fFuncPtr).name() << std::endl; std::chrono::time_point<std::chrono::system_clock> start, end; start = std::chrono::system_clock::now(); for (size_t i = 0; i < testNum; i++) { a = testEfficiency (a, 2); } end = std::chrono::system_clock::now(); std::cout << "直接调用耗时:\t\t" << std::chrono::duration<double> (end - start).count() << "秒" << std::endl; start = std::chrono::system_clock::now(); for (size_t i = 0; i < testNum; i++) { b = fFunctional (b, 2); } end = std::chrono::system_clock::now(); std::cout << "使用std::function耗时:\t" << std::chrono::duration<double> (end - start).count() << "秒" << std::endl; start = std::chrono::system_clock::now(); for (size_t i = 0; i < testNum; i++) { c = fFuncPtr (c, 2); } end = std::chrono::system_clock::now(); std::cout << "使用函数指针耗时:\t" << std::chrono::duration<double> (end - start).count() << "秒" << std::endl; std::cout << "a=" << a << std::endl; std::cout << "b=" << b << std::endl; std::cout << "c=" << c << std::endl; }
发表评论
-
C++函数中的静态变量
2019-07-19 11:22 770在C++中,可以在成员函数中使用静态变量,从而间接达到在hpp ... -
tensorflow 静态编译笔记 -- linux系统
2018-11-05 14:26 0注: 1、编译tensorflow静态库 很简单,参见: h ... -
gperftools笔记
2018-06-27 14:30 0export LD_LIBRARY_PATH=LD_LIBR ... -
dmlc分布式线性模型编译笔记
2018-06-06 10:37 21131、使用第三方修改后的wormhole工程 原始工程wor ... -
C++中读取控制台输出,并将文件指针FILE*转换为istream
2017-11-27 15:03 1720解决的问题: 1、通过执行系统的bash命令后,获取其输出( ... -
c++中使用boost库在共享内存中存储map
2017-11-09 11:37 5142boost库中的interprocess包可以在共享内存中创建 ... -
近似最近邻算法库FLANN
2017-04-25 18:45 0FLANN库是计算近似最近邻的库, 问题定义如下: 给定距离函 ... -
C++杂记-- 重定向std::cout等
2017-04-18 17:28 18991、屏蔽std::cout 参见:http://stackov ... -
CMake指定目标代码的平台(win32,x64)
2016-06-03 20:54 11549主要参考自:http://blog.c ... -
windows 10下安装GPU版MXNet
2016-06-03 21:28 8535上回说到编译CPU版的MXNet: http://cheris ... -
windows下安装CPU版mxnet
2016-05-23 23:14 17500MXnet (mix net)类似Caffe,Tensorfl ... -
Linux C++编译及 静态/动态 链接库 笔记
2015-12-20 19:49 59971、C++文件的编译 g++参 ... -
Linux (Ubuntu) 下 Eclipse C++ 环境配置
2015-12-08 21:49 19231、安装JDK 参见http://blog.csdn.net/ ... -
Photoshop插件开发-filter
2015-10-11 22:53 3321初学,,感觉PS插件的文档很烂,,教程也很少,,也就这么简单学 ... -
使Visual Assist X支持CUDA的.cu文件的代码提示
2015-07-17 00:05 2241现在安装CUDA很方便了,直接支持Visual Studio。 ... -
CUDA程序block和thread超出硬件允许值时的异常
2015-07-13 11:32 3697调用CUDA的核函数时指定block 和 thread大小,该 ... -
创建及使用DLL
2014-09-29 15:22 1202此篇仅作简要的记录,作为备忘。 更为详细的可以参考:http: ... -
matlab的mexFunction中使用std::cout(部分转载)
2014-09-27 15:37 2129在matlab、C++混合编程的时候,可能会用到之前的代码。代 ... -
Eigen库:那些年我们一起经历的bug
2014-09-24 18:39 17801、使用auto声明新变量 ... -
C++:无虚函数的类作为有虚函数类的父类时产生Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
2014-09-24 09:48 1907调程序时忘了为啥,写了一小段测试程序,再简单不过,结果跑出了E ...
相关推荐
C++11中的std::packaged_task是个模板类。std::packaged_task包装任何可调用目标(函数、lambda表达式、bind...存储的任务(stored task)是一些可调用的对象(例如函数指针、成员或函数对象的指针)( A stored task, which
在 <functional> 头文件中, std::function 是个可调用Callable对象的容器,可以容纳 函数、函数指针、lambda表达式、成员函
这里面有两个运用回调函数的DEMO程序 1.其中tcCallBack的作用是希望通过将Receiver类的...2.另外一个tcFunctionTemplate是使用std::function模板和std::bind,支持全局和类成员函数作为回调函数,我在VS2010下编译通过
概述 一组执行任务的语句都可以视为一个函数,一个可调用对象。在程序设计的过程中,我们习惯于把那些具有复用性的一组语句抽象为函数,把变化的部分抽象为函数的参数。... std::function C++11加入标准
消除 "单纯传递调用函数" 097 以distance() 为例 098 3.5 std::iterator class 的保证 099 3.6 iterator相关源码完整重列 101 3.7 SGI STL的私房菜:__type_traits 103 第4章 序列式容器(sequence containers...
一个是根据函数的名字来调用函数, 另一个是调用一个可以作为函数调用的Lua值. 使用函数名来调用的版本只能调用Lua全局函数. "..."代表传递给Lua函数的 可变个数的参数. 这使得你可以指定调用的策略.你可以通过 ...
C++提供了很多种可调用对象,例如函数指针、lambda、重载了operator()的对象等。有时我们需要将这些对象统一管理,这时使用如下这种方式是不行的: int add(int i, int j) { return i + j; } struct divide {...
14.8.3 可调用对象与function 511 14.9 重载、类型转换与运算符 514 14.9.1 类型转换运算符 514 14.9.2 避免有二义性的类型转换 517 14.9.3 函数匹配与重载运算符 521 小结 523 术语表 523 第15章 ...
14.8.3 可调用对象与function 511 14.9 重载、类型转换与运算符 514 14.9.1 类型转换运算符 514 14.9.2 避免有二义性的类型转换 517 14.9.3 函数匹配与重载运算符 521 小结 523 术语表 523 第15章 ...
// 调用基类成员函数;内联函数(in-line) #include #include using namespace std; class child { protected: char name[20]; int age; public: child(); child(char *n,int a); void ask(char *n); void ...
消除 "单纯传递调用函数" 097 以distance() 为例 098 3.5 std::iterator class 的保证 099 3.6 iterator相关源码完整重列 101 3.7 sgi stl的私房菜:__type_traits 103 第4章 序列式容器(sequence containers...
这上传的资源中包含一套我工作中常用的模板库,及不需要MFC支持的excel操作接口,导出函数调用栈(dump stack)接口,可以直接用VS2008运行TestCodeLib.sln来根据unit test来了解用法。 ⑴ 需求(requirements) 重量级...
4.4.2exit(3) 在C++ 中不是线程安全的.. . . . . . . . . . . . . . . . 94 4.5善用__thread 关键字.. . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.6多线程与IO . . . . . . . . . . . . . . . . ....
该函数指针是库对伪随机数生成器的访问。 因此,如果rng是这样的实例,则rng必须满足以下要求:对rng()任何调用都将在间隔[0,1)内返回随机双精度数,并且必须可以无限次地调用rng() 。 如果传递的对象不满足这些...
2)在command line:中填写:c:\lint\lint-nt c:\lint\std.lnt %f 3)在Menu Item中填写:PC-LINT 4)在Command Output中选择: (x) Output to List Box 和 (x) Capture Output 5)点按"OK" 如图所示的配置...