随笔分类 -  C++

C++小练习:字符串分割的高性能实现
摘要:字符串分割是很常见的功能,通常其实现代码也很简洁,这就使得开发者容易忽略其性能,写出非最佳性能的代码,譬如:没有使用现代 C++ 中的 string_view、对遍历过程没有精细考虑。通过精细的控制计算量以及应用 SIMD 指令可以获得比较好的收益,特别是 SIMD 指令在任意多分隔符场景下性能优化效果非常明显。 阅读全文
posted @ 2023-10-29 22:00 烛秋 阅读(2183) 评论(6) 推荐(10) 编辑
一个std::sort 自定义比较排序函数 crash的分析过程
摘要:两年未写总结博客,今天先来练练手,总结最近遇到的一个crash case。 注意:以下的分析都基于GCC4.4.6 一、解决crash 我们有一个复杂的排序,涉及到很多个因子,使用自定义排序函数的std::sort做排序。Compare函数类似下文的伪代码: 后来,我们给排序函数加了更多的复杂逻辑: 阅读全文
posted @ 2018-12-21 12:07 烛秋 阅读(4806) 评论(2) 推荐(2) 编辑
编译GCC4.8.2
摘要:公司的机器上默认是GCC4.4.6,为了完整的体验C++11,可以自己编译一个GCC4.8.2出来(自带了更高版本的glibc)。 以下是备忘。 1、下载GCC源码以及依赖库 gmp ftp://ftp.gnu.org/gnu/gmp/gmp-6.1.1.tar.bz2 mpfr ftp://ftp 阅读全文
posted @ 2016-12-25 21:58 烛秋 阅读(1965) 评论(2) 推荐(0) 编辑
使用C++11的一点总结
摘要:C++11已不是新鲜技术,但对于我来说,工作中用得还不够多(前东家长时间使用gcc3.4.5,虽然去年升了4.8.2,但旧模块维护还是3.4.5居多;新东家用的是4.4.6,不能完整支持C++11,而且有内部有基础库早已支持了C++11 STL的部分功能),再加上自己的练习也写得少,了解仅是几点简单 阅读全文
posted @ 2016-12-25 21:48 烛秋 阅读(20385) 评论(0) 推荐(2) 编辑
boost::spirit unicode 简用记录
摘要:本文简单记录使用boost::spirit解析有中文关键字的字符串并执行响应动作,类似于语法分析+执行。关键字:字符串解析 boost::spirit::qi::parse qi::unicode::char_这几天在使用boost::spirit解析中文字符串表达式,网络上这方面的资料很少,很多介... 阅读全文
posted @ 2016-01-22 00:37 烛秋 阅读(1529) 评论(0) 推荐(1) 编辑
Singleton、MultiThread、Lib——实现单实例无锁多线程安全API
摘要:前阵子写静态lib导出单实例多线程安全API时,出现了CRITICAL_SECTION初始化太晚的问题,之后查看了错误的资料,引导向了错误的理解,以至于今天凌晨看到另一份代码,也不多想的以为singletone double check会出bug,本文做下记录备忘。 相关知识点:Singleto... 阅读全文
posted @ 2014-03-01 14:07 烛秋 阅读(1754) 评论(0) 推荐(0) 编辑
windows下捕获dump之守护进程
摘要:一两个月前为产品写了一个独立的exe,由于产品使用的捕获dump是一个现成的进程外exe,如果以资源的方式集成它容易出现安全警告,由于时间关系没有寻求新的解决方法,还是遵循旧方案,不捕获dump。 最近业余看了会儿breakpad client,想到一个解决方案——其实也蛮简单的,最后exe大概会增加200多KB。下边从头分析。 有这样一种需求,希望一个进程启动之后,有另一个进程来“守护”它,当它发生crash时,能生成dump,然后把它重启;还有一个要求,“守护”进程跟工作进程必须是在同一个物理文件里,就像chromium一样,它是多进程的,但只有exe文件只有一个。借助breakpa... 阅读全文
posted @ 2013-08-31 17:38 烛秋 阅读(5196) 评论(0) 推荐(0) 编辑
使用openssl库实现RSA、AES数据加密
摘要:openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密。可以使用非对称加密:公钥加密,私钥解密。openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做法是使用对称密钥加密数据,然后再把这个只在当前有效的临时生成的对称密钥用非对称密钥的公钥加密之后... 阅读全文
posted @ 2013-07-13 01:39 烛秋 阅读(57167) 评论(1) 推荐(0) 编辑
侵入式智能指针
摘要:智能指针 阅读全文
posted @ 2013-03-05 00:51 烛秋 阅读(1942) 评论(0) 推荐(0) 编辑
由“Pure Virtual Function Called” 考虑到的
摘要:2012-8-22cswuyg1. 派生类对象析构时,基类析构函数执行的前期会修改对象的虚函数表指针值 一般情况下(特指基类不使用novtable属性),debug编译出来的exe,派生类对象的析构,在析构基类部分的时候,对象的虚函数表指针值项会被修改成基类的虚函数表地址,然后再执行基类的析构函数体。其中高亮的那一行是修改对象的虚函数表指针值为基类虚函数表地址 release下编译出来的就不是这样子。以一个小测试程序为例,编译器做了优化,并没有在调用基类析构函数时做赋值。但不确定编译器是否会一直做优化,因为看到了派生类析构函数体实质内容执行之前对虚函数表指针值做了一次赋值,那么为什么在基... 阅读全文
posted @ 2012-08-22 12:32 烛秋 阅读(4011) 评论(0) 推荐(0) 编辑
C++之this指针与另一种“多态”
摘要:C++之this指针与另一种“多态”2010-7-9烛秋一、引入 定义一个类的对象,首先系统已经给这个对象分配了空间,然后会调用构造函数(说明:假设存在构造函数--2010.9.5修正)。一个类有多个对象,当程序中调用对象的某个函数时,有可能要访问到这个对象的成员变量。而对于同一个类的每一个对象,都是共享同一份类函数。对象有单独的变量,但是没有单独的函数,所以当调用函数时,系统必须让函数知道这是哪个对象的操作,从而确定成员变量是哪个对象的。这种用于对成员变量归属对像进行区分的东西,就叫做this指针。事实上它就是对象的地址,这一点从反汇编出来的代码可以看到。二、分析1、测试代码://////. 阅读全文
posted @ 2010-08-21 09:53 烛秋 阅读(2230) 评论(3) 推荐(0) 编辑
编译器对临时变量的优化--简单理解
摘要:编译器对临时变量的优化--简单理解2010-7-6烛秋2010-8-20整理一、问题来源 之前对NRV优化做了一点总结,还有所欠缺,只分析了 A b = f();的情况,没有去分析A b; b = f();的情况。又想起之前看过的书,对产生临时对象的讲解都是假设了编译器没有进行优化,然后说要提高C++程序性能,必须尽量的少使用返回对象,因为那样才不会产生临时对象。多使用引用/指针可以减少临时对象的产生,提高程序性能,这个观点没有错。但事实上很多编译器多做了优化,使得临时对象的产生减少了很多,打算以最简单的例子对编译器的优化做简单的理解。代码:/**//////////////////////. 阅读全文
posted @ 2010-08-21 00:07 烛秋 阅读(2463) 评论(0) 推荐(0) 编辑
自己动手理解NRV优化
摘要:自己动手理解NRV优化2010.6.29烛秋2010.8.20整理说明:本文整理自:http://blog.csdn.net/wuxupeng999/archive/2010/06/29/5701513.aspx一、NRV的简单理解 NRV是Named Return Value的简称。NRV优化简单的说:有一条语句,A a = f();其中f()是一个函数,函数里边申请了一个A的对象b,然后把对象b返回。在对象返回的时候,一般情况下要调用拷贝函数,把函数f()里边的局部对象b拷贝到函数外部的对象a。但是如果用了NRV优化,那就不必要调用拷贝构造函数,编译器可以这样做,把a的地址传递进函数f(. 阅读全文
posted @ 2010-08-20 22:56 烛秋 阅读(2041) 评论(0) 推荐(0) 编辑
回答总结:C实现“动态绑定”
摘要:C实现“动态绑定”2010-7-26烛秋在论坛上看到这样一个问题:“用C能实现C++的动态绑定吗?”网址:http://topic.csdn.net/u/20100624/21/3d7eda37-cbf7-4e36-a549-f2d6f1a3eeed.html?47092。。现在看当时我的回复(ID:wuxupeng999),觉得理解上还是有些不足,... 阅读全文
posted @ 2010-08-20 22:05 烛秋 阅读(1953) 评论(3) 推荐(1) 编辑