随笔分类 -  C/C++

编程语言和环境搭建
摘要:我们知道有些宏的参数是表达式,在DEBUG启用的使用,可以输出一些日志,在RELEASE的时候,可以节省性能。 如下的宏定义是基于lambda表达式,可以处理一些复杂的逻辑。 阅读全文
posted @ 2019-10-28 17:46 westfly 阅读(749) 评论(0) 推荐(0)
摘要:命名空间别名 允许程序员定义命名空间的另一个名字 它们常用作长的或嵌套过深的命名空间的简便使用方式。 我们也可以将用在代码移植上,而无需修改源代码的文件所定义的命名空间, 为后面升级merge代码创造了良好的条件。 阅读全文
posted @ 2019-05-10 11:19 westfly 阅读(127) 评论(0) 推荐(0)
摘要:线上日志用到的是日志库,在全局有一个锁,导致在高并发的时候,容易因为锁竞争问题导致时延。在某些情况下,会因为同一个用户,同时访问某个变量,导致读写冲突使线上服务整体core掉(考虑到请求的间隔,为了应对偶发1%%的情形,如果加锁会对整体性能有一定的影响,所以当时权衡就没有加锁)。 于是就想把这个日志 阅读全文
posted @ 2019-02-14 09:51 westfly 阅读(1095) 评论(0) 推荐(0)
摘要:最近读一个文件的某一行后,进行域切分的时候,最一个字段为空。 明明有字符的,于是缩小范围进行debug。 因为底层是getline写的,所以跟踪了一下,发现getline的读取到\n结束作为一行的。 如下read到的641, 但strlen 返回的为21,所以感觉是读取到的行中包含\0字符。 通过h 阅读全文
posted @ 2019-01-30 11:52 westfly 阅读(2032) 评论(0) 推荐(0)
摘要:项目中集成了abseil。abseil提供了cmake的编译,但是缺少make install命令。 于是有了下面的的一些命令,用于生成include和lib目录。 参考 增强现实的 abseil 库(1) 阅读全文
posted @ 2018-08-24 19:28 westfly 阅读(4149) 评论(0) 推荐(0)
摘要:1. 下载最新版的boost wget https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.gz 2. 解压 3. 执行如下脚本 第一步是为了启用4.9的编译器。 make的参数解释如下 下面对上面的bjam的 阅读全文
posted @ 2018-06-15 15:11 westfly 阅读(598) 评论(0) 推荐(0)
摘要:C++11出来好久了,现在还是使用c++03的,需要在centos6.6的系统上实现gcc的升级,又不想自己编译代码。 于是选用了devtoolsset系列,安装脚本如下 安装脚本如下 function devtools_v3() { sudo yum install devtoolset-3-gc 阅读全文
posted @ 2018-06-12 10:23 westfly 阅读(3667) 评论(0) 推荐(0)
摘要:最近有个需求,开屏广告每天只出一次。 思路为如果出了开屏广告,则记录当前时间,下次来的时候,读取当前时间和上一次出开屏的时间。 算一下是不是在同一天即可。 我们的第一个想法是将上次开屏时间和当前时间归一到 0 点进行比较(其实有写个更简单的方法)。 所以我们需要获取某一个时间戳 当天的 0点。 可以 阅读全文
posted @ 2017-12-09 15:34 westfly 阅读(4413) 评论(0) 推荐(0)
摘要:根据man手册,在文件中加上以下定义,应该可以去处该warning #define _XOPEN_SOURCE /* glibc2 needs this */ #include 但不起作用(重新编译还是有该warning) 加上编译选项-D_XOPEN_SOURCE又出现一大推其他编译错误 最后在找 阅读全文
posted @ 2017-06-18 19:52 westfly 阅读(5978) 评论(0) 推荐(0)
摘要:有个参数,需要判断其Value是否为指针,如果是做相应的处理。 代码示例如下,后来发现is_pointer在std空间中。 阅读全文
posted @ 2016-12-15 15:16 westfly 阅读(597) 评论(0) 推荐(0)
摘要:在redhat5上运行plantomjs 2,出现如下错误 bin/phantomjs: /lib64/libz.so.1: no version information available (required by bin/phantomjs)bin/phantomjs: /usr/lib64/l 阅读全文
posted @ 2016-03-20 14:29 westfly 阅读(1250) 评论(0) 推荐(0)
摘要:在系统从redhat5升到redhat6的过程中,服务的性能差了很多。经过定位发现是程序中频繁调用localtime/localtime_r所致。而调用localtime_r 的实现中,对时区进行了加锁,有bug反馈其有切换的性能损耗。修复服务程序就有两种思路。1. 减少localtime_r的调用... 阅读全文
posted @ 2016-01-18 16:21 westfly 阅读(4610) 评论(0) 推荐(0)
摘要:oprofile利用cpu硬件层面提供的性能计数器(performance counter),通过计数采样,帮助我们从进程、函数、代码层面找出占用cpu的"罪魁祸首"。常用命令使用oprofile进行cpu使用情况检测,需要经过初始化、启动检测、导出检测数据、查看检测结果等步骤,以下为常用的opro... 阅读全文
posted @ 2015-10-24 21:44 westfly 阅读(424) 评论(0) 推荐(0)
摘要:最近用到了protobuf传输数据,但在protobuf之前还有个协议头。因为是重构,所以需要模拟协议头部。有如下代码string data;char buffer[256];memcpy(buffer, &header, sizeof(header));data.append(buffer);cl... 阅读全文
posted @ 2015-09-23 18:33 westfly 阅读(264) 评论(0) 推荐(0)
摘要:需求1. 将内存、线程数等信息注册到zk上进行监控2. 统计信息,为下一步做负载均衡做准备。实现本文只解决问题1。从网上查询了下,这些信息可以从proc文件系统中获取,如果不知道proc的,可以Google下。网上有读取proc信息的lib——libproc,即 procps , 据说htop等实现... 阅读全文
posted @ 2015-01-17 19:40 westfly 阅读(621) 评论(0) 推荐(0)
摘要:最近有个开发需求,根据server传递来的广告位来展示某条广告。但最终存储广告的数据结构是deque,里面存储的东西还是对象(stl 基于拷贝语义)。想了半天,在开头和结尾插入比较方便,在中间插入就有些困难了——因为是双端队列,思维惯性啊!另外一个问题deque中存储的是对象,这个涉及到覆盖和新的拷... 阅读全文
posted @ 2015-01-17 19:27 westfly 阅读(1362) 评论(0) 推荐(0)
摘要:知乎上个问题《C 语言有什么奇技淫巧?》排名第一的是一个“抖机灵”的答案。C有一个鲜为人知的运算符叫”趋向于”, 写作“-->”。比如说如果要实现一个倒数的程序,我们可以定义一个变量x,然后让它趋向与0:其它答案也是蛮有意思的,有个和解答与它一样,可以看做"!!" 符号。/* Force a com... 阅读全文
posted @ 2015-01-08 11:28 westfly 阅读(3744) 评论(0) 推荐(0)
摘要:http://github.tiankonguse.com/blog/2014/12/05/c-base/一个比较有意思的问题#includeint i = 0;int f(){ i += 190; return i;}int main(){ printf("%d\n", sizeof... 阅读全文
posted @ 2014-12-12 10:48 westfly 阅读(220) 评论(0) 推荐(0)
摘要:想到一个场景,具体代码如下#include #include int main(int argc, const char *argv[]){ free(NULL); fclose(NULL); return 0;}free(NULL)指针,会直接返回free(ptr),并不会将pt... 阅读全文
posted @ 2014-12-03 10:50 westfly 阅读(682) 评论(0) 推荐(0)
摘要:最近写了一大段代码,抽象得厉害,容易绕进去,因为写单测的代价很大(借口),所以很多问题到联调的是否才发现。而且花费了很大的经历才查出来,主要问题有如下几个问题1. 变量未初始化具体来说,就是指针之类的,这个是之前遇到的比较多,当前已经很少了,拿出来说是因为这次用上了一个栈上单例(常见的单例,一般是n... 阅读全文
posted @ 2014-11-22 14:20 westfly 阅读(1204) 评论(0) 推荐(0)