C++ 标准过渡期
C++11的新标准已经出台,各个编译器已经开始陆续支持。 主流编译器支持程度见(VC++, gcc, clang, intel c++等):http://en.cppreference.com/w/cpp/compiler_support
但是要让C++11应用与生产环境还需时日,所以就在这里记录一下在过渡时期可能用到的一些重要功能
程序员修炼之道 -- 阅读笔记
终于要离开学校了,终于有时间可以静下来看看之前导师推荐的书籍。之前有看到说《程序员修炼之道》是对程序员影响最为深刻的书, 就从它开始吧。用这个还算可以的音响听着音乐,看书很惬意啊。 顺便吐槽下京东,我买了本地有货的三本书,三天了我还没见到。这效率实在是fuck。 第一本书的第一章是电子版上看的,还好我有kindle。这里基本上说的是沟通方面的。我发现我的沟通确实有点问题,不太主动,表达含糊。之前只和ultramanhu交流比较多,可能是多年的默契吧,表达清楚意思不怎么费劲。现在的一起合租的xboy(和qboy很像啊),和他交流经常文不对题,开始我总以为他习惯岔开话题,但是后来发现在其他有些人身上也出现过这种问题。看来我的表达力确实有问题,一直说ben大神的表达力低下,其实他只是我这种更恶化一些罢了。不管怎么说,之前看到过个视频,我觉得很有道理,对世界的理解应该是 “知其然 — 知其所以然 – 知其知其所以然 – 知其知其所以然所以然”。别人也是属于世界的一部分,了解别人看待事物和自己不一样、了解别人看待事物的角度、了解别人为什么和自己看待事物的和自己不一样,都是自身对这个世界的理解。同样,自己要表述的意思让各种各种各样的人有理解并且有兴趣听也是自身表达能力的一种体现。Maybe,这就是我大学生活孑然一身(不完整啊)的原因吧。T_T “注重实效的哲学”,其中最重要的部分当属那个WISDOM离合诗了吧。
[转载]狼与哈士奇
原文地址:http://www.cnblogs.com/MeteorSeed/archive/2012/08/04/2621993.html
狼是自然界中真正的掠食者,而哈士奇不过是人类的玩物。两者长得确实很像,就如同IT界的Programer和Coder。如果用狼和哈士奇来隐喻这两种职业,Programer无疑是软件业真正的狼。
C++ 新特性学习(八) — 原子操作和多线程库[多工内存模型]
这是我对C++新特性系统学习的最后一部分,之后就靠实践中再来看新标准的新特性啦。
在之前,我对这部分没太在意,直到看到了一篇文章 [http://blog.csdn.net/pongba/article/details/1659952](http://blog.csdn.net/pongba/article/details/1659952) 才意识到,C++的多线程操作也是个麻烦的问题。
简而言之,C++编译器在进行编译优化的时候,认为当前是单进程的,并且遵循**可观察行为**(Observable Behavior)不变的原则。就是说在可观察行为不变的情况下,操作是可以被改变顺序的,而单进程可观察行为不变,不代表在多进程的情况下仍然不变。还是上大牛的例子:
_**例子一:**_
| x = y = 0; | |
| 线程1 | 线程2 |
| if(x == 1) ++y; | if(y == 1) ++x; |
完全可以优化成
C++ 新特性学习(七) — 右值引用
C++在效率上有个硬伤。我们知道C#和Java对于类传递都是以引用的方式,而C++默认都是传值。在传值过程中就经常会进行复制构造,这完全没必要而且浪费CPU,为了解决这种问题,于是乎C++11 增加了一个新的非常数引用(reference)类型,称为右值引用(R-value reference)。我就专门看了一下关于右值引用的东西。 右值引用在GCC 4.3之后开始支持,VS 2010(VC 10.0)已经支持,再前一点的VC版本没试过所以不知道。 右值引用的申明标记为T &&,主要用于处理临时变量,比如函数返回的变量(暂时想不出其他例子,忽略返回值优化吧,(命名)返回值优化参见http://efnetcpp.org/wiki/Return_value_optimization,再说返回值优化能力有限是吧,比要求如单返回语句、不能使用异常等等),避免复制构造。同时在析构的时候就不会析构这个临时变量,从而提升效率。 上代码:
理解Protobuf的数据编码规则
之前用Google的Protobuf感觉真是个很好用的东西,于是抽时间研究了下他的数据的存储方式,以后可以扩展其他语言的解析器。其实与其说是研究,不如说是翻译。这些文档里都有,可能有些地方理解的不太对,还请见谅。
Linux编译安装GCC 4.7
Linux编译安装GCC 4.7
详见: Linux编译安装GCC 4.7
准备环境及依赖项
- 支持 ISO C90 的编译器
- 用于创建Ada编译器的GNAT
- 支持POSIX的shell或GNU bash
- POSIX或SVR4的 awk工具
- GNU binutils
- gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 )
- bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/)
- GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 )
- GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 )
- perl 版本5.6.1及以上 (此处可下载 http://www.perl.org/)
- jar或zip和unzip工具 (此处可下载 http://www.info-zip.org)
- gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 )
- mpfr库 版本2.4.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 )
- mpc库 版本0.8.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 )
- ppl库 版本0.11及以上 (此处可下载 http://www.cs.unipr.it/ppl/Download/)
- isl 版本 0.10 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 )
- cloog-ppl 版本0.15 或cloog 版本0.16(注意不能使用更高版本) (此处可下载 http://cloog.org/ )
我编译的环境
系统:
JSON显示库 -- showJson (Javascript)
现在的web的js开发很方便啊,但是碰到iframe里的东西还是不方便看到变量的内容,所以就写了这么个看json内容的玩意,还可以当控制台输出用。
C++ 新特性学习(六) — 新的字符串编码和伪随机数
其实这个部分是我觉得最没用的部分
新的字符编码
注:这部分仅测过GCC,VS暂不支持
在旧的标准C++中支持两种字符编码。
直接使用””将产生const char。
使用L””将产生const wchar。
C++ 新特性学习(五) — 引用包装、元编程的类型属性和计算函数对象返回类型
这各部分主要是一些很实用和在一些地方帮助编译器自动推断类型的库和函数 首先是引用包装 类名 template< class T > class std::reference_wrapper; 这个类保存了对一个类实例、(成员)函数(指针) 构造时必须传入所引用的对象或引用对象的右值引用 主要方法有 =号操作符, 用于重新绑定引用对象 类型转换操作符, 用于转换为模板目标类的引用类型 get方法, 用于获取引用的对象 ()操作符, 用于执行引用的函数
C++ 新特性学习(四) — Bind和Function
绑定函数是我认为C++新标准里第二有用的库了 绑定库的使用环境是:
- GCC-C++ 4.3 及以上
- Visual Studio 2008 SP1 及以上
- BOOST 1.25及以上(其中function是1.16及以上)
先来看一段代码
C++ 新特性学习(三) — Regex库
C++ STL终于会放点实用的东西了。可喜可贺。
这个,显然是正则表达式库,作为一个强大而又NB的库,我表示对其理解甚少,只能先研究下基本用法,更具体的用法要等实际应用中用到的时候在细看了。 PS:正则表达式的资料见 http://www.regexlab.com/ 更多资料见 https://www.owent.net/2011/264.html
C++ 新特性学习(二) -- Array、Tuple和Hash库
这回的两个库没怎么用过,这里的记录就用VC++写了,使用G++和BOOST的时候和智能指针类似。
首先是Tuple库
要注意的是这里G++,VC++和BOOST库的函数不太一样,所以使用的时候要注意没有使用到编译器和编译器相关的函数(特别是IDE的弹窗的方法要注意)。
C++ 新特性学习(一) -- 概述+智能指针(smart_ptr)
C++ 0x/11 终于通过了,真是个很爽的消息。于是乎我决定对新的东西系统学习一下。
首先当然要从tr1开始,智能指针实际上我已经用过很多次了,但是为了完整起见,还是写出来记录一下。
Linux 和 Windows PowerShell 常用工具/命令 记录
Linux 常用工具
- enca: http://dl.cihar.com/enca/ 文件名编码转换
- iconv: 文件编码转换
- convmv: 文件名编码转换
- ldd: 查看可执行文件或动态链接库的依赖库
- getconf: 查看配置信息(如getconf LONG_BIT可知当前系统是32位还是64位版本)
- tcpdump: 监视网络服务
- sync: 将缓冲区内容写入磁盘
echo 3 > /proc/sys/vm/drop_caches: 手动释放缓存- nm: 查看符号表
- readelf: 查看ELF信息(Executable and Linkable Format)
- man: 文档
- top/htop: 查看最高占用
- perf: 性能数据采集
- sar: 系统信息采集
- uptime: 系统1分钟、5分钟和15分钟的系统平均负载
- free: 内存使用情况
- iostat: 磁盘IO使用情况
- pidstat: 查看进程状态
- ipcs: 查看共享内存、消息、信号量信息,如:ipcs -m 共享内存
- objdump –CS –l [bin文件]: 不反人类的反编译
- strace: 系统调用跟踪
- pstack: 查看当前调用栈
- lsof: 查看打开的文件
- ip addr: 查看ip地址
man [章节号] 手册名称:
2011 Google Code Jam 小记
好久没写这种类型的代码,感觉真是退步了很多。 这是我第一次参加Google Code Jam,以前有过报名可是没有做过。 我发现Google Code Jam的题目使用经典算法的几乎没有,都是模拟或者数学题(起码我目前做过的几题是这样)