cpp
文章平均质量分 52
fanyamin
Pragmatic programmer
展开
-
C++ 程序 Crash 的分析
如果容易,它的复现步骤是什么如果不容易,它在什么条件下的出现机率比较大,有没有可能缩小排查的范围找出 crash 出现的时间范围,时机,和频率根据 backgrace 和 git log, 回顾 crash 相关代码的修改记录假设条件,测试,排除,不断重复,缩小范围有必要时画一张思维导图,记下每条排查路径查询 google, stackflow, 听取同事的意见最后一条,看看破案和推理小说及剧情,学学侦破技术有一些惯犯和惯用作案手段值得研究多线程处理不当多个线程操作一块内存区域,没有安全地加锁和串行原创 2022-07-12 10:57:50 · 1035 阅读 · 0 评论 -
用 C++ 和 libgd 来绘图
用 C++ 使用 libgd 来绘图[TOC]旧文转贴, 代码很久以前写的, 大约至今有十年了, 最近看到有人问如何用 C++ 来生成图表. 有一个 graphviz 的开源库可以用, 它用了自己的领域特定语言 DSL: dot 来生成图表, 具体应用可见 http://graphviz.org/当然也可以不用这么重的开源库, 这里介绍的是比较原始的作法, 调用了 libgd 基础API, 如画原创 2016-07-31 15:47:37 · 1387 阅读 · 0 评论 -
温故指针一
温故指针指针不过是有类型信息的地址, 它可以是一个函数的地址 function pointer, 也可是一个数据的地址 data pointer.变量的地址和变量的类型有关 1. 全局和局部静态变量 已初始化的全局以及局部静态变量都是放在目标文件的 .data 段中 而未初始化的全局以及局部静态变量则放在目标文件的 .bss 段中栈变量 函数的局部变量是在栈上分配的, 其地址原创 2016-02-10 23:55:20 · 464 阅读 · 0 评论 -
JavaScript 引擎性能比较之一SpiderMonkey
1. 下载https://people.mozilla.org/~sstangl/mozjs-31.2.0.rc0.tar.bz2bunzip2 mozjs-31.2.0.rc0.tar.bz2tar xvf mozjs-31.2.0.rc0.tar2. 构建https://developer.mozilla.org/en-US/docs/Mozilla/Projects/原创 2015-05-07 21:10:34 · 8378 阅读 · 0 评论 -
JavaScript 引擎性能比较之二Google V8
还是和上一篇一样的 javascript arraysort.js, 现在由 V8 来执行, 看看测试结果如何function random_str(){ var text = ""; var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for( var i原创 2015-05-10 08:33:12 · 5126 阅读 · 1 评论 -
review autotools 1st
这套东西说起来非常不好用,但是总也绕不开,特别是跨平台时 unix, linux, macos, cygwin一段时间不用也就记不得了,找出原来的笔记,放在这里以供以后备查原创 2014-02-05 12:34:21 · 638 阅读 · 0 评论 -
LNK2005 caused by code generation flag
类似下面这种错误非常多msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: char __thiscall std::basic_ios >::fill(void)const " (?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ) already defined in gm原创 2014-01-16 15:30:50 · 928 阅读 · 0 评论 -
温故 epoll
select, poll, epoll 是三种不同的I/O事件通知机制. select最简单,poll次之,epoll要麻烦点,在于它的边缘触发和水平触发容易产生一些陷阱.基本上来说, 网络编程中雷区多多,所以轻易不要直接用socket api来写网络应用程序, 使用 ACE, Boost, etc.之类的网络库比较保险一些。但是,终归出了问题或者调优还得知原创 2013-07-16 22:15:42 · 698 阅读 · 0 评论 -
signal-slot 信号槽技术初探二
看看 sigslot.h 的内部实现, 以比较简单的 signal1为例,它可有一个参数, 两个模板参数一个是参数类型,一个是多线程策略重点是它的1) connect 方法 , 将它和目的类和目的方法进行连接2) emit 方法, 触发消息发送到槽的对应方法 template class signal1 : public _signal_base1 { public:原创 2012-10-22 22:53:04 · 591 阅读 · 0 评论 -
signal-slot 信号槽技术初探一
信号槽技术由来已久, 早就听说在QT中大量应用,一起未曾研究, 最近要用到 libjingle, 看了相关文章和代码。它利用了模板技术将 消息producer--触发信号的那个对象 和 consumer -- 接受信号的那个对象(槽) 进行解耦, 很好的简化了代码.类似的技术常用的是 callback, 如典型的event and dispatch loop, onEvent, onCo原创 2012-10-10 10:15:30 · 1151 阅读 · 0 评论 -
ACE研读笔记之一-编译安装篇
==编译安装==Download ACE-5.6.1.tar.gz from http://download.dre.vanderbilt.edu/===Linux platform===1.export ACE_ROOT=/home/walter/ACE_wrappersexport LD_LIBRARY_PATH=${ACE_ROOT}/ace:${LD_LIBRARY_P原创 2007-11-19 22:05:00 · 1226 阅读 · 0 评论 -
ACE研读笔记之二-Socket Wrapper Facades
C++主要是通过socket APIs 进行网络编程的, socket相关的API接口函数可谓洋洋大观, 多且繁杂, 稍不注意,就有可能误用用C++类对它们进行适当的封装是不错的主意, 在ACE中对此进行了比较优雅的封装ACE 的Socket 包装类可分为三类1. 被动和主动连接工厂类Passive and active conneciton factories:原创 2007-11-30 16:02:00 · 3097 阅读 · 0 评论 -
ACE研读笔记之五-循环式日志服务器
学习ACE,不仅是它的用法,更重要的是它的代码, 而面对ACE如此庞大的代码库, 一开始会有种无从下手的感觉, 按以往的经验,从一个实例出发最容易入手.先看C++NPv1中给出了一个网络日志服务程序 Iterative Logging Server最简单的循环式服务器, 用原生的系统API写一个也不难, 无非是先创建socket,再listen, accept, read/writ原创 2007-11-24 23:32:00 · 1598 阅读 · 0 评论 -
C++性能优化备忘
==影响性能的常见因素==* 访问/读写慢速的磁盘,网络设备或外部设备* 频繁的new/delete对象,尤其是复杂的大对象* 频繁的函数调用也会带来性能上的开销* 频繁的创建进程/线程,以及数据库/网络连接* 不合适的数据结构和低效的算法==针对这些因素的相应解决方法==* 使用内部缓存以减少读取外设的次数,将读写外设的操作放到单独的线程中* 使用内存池或其他内存原创 2007-11-19 22:24:00 · 917 阅读 · 0 评论