C/C++ 精华文章
文章平均质量分 85
kobejayandy
十多年互联网产品研发经验,历经华为、腾讯、字节跳动等公司,主要从事后端技术研发及技术管理工作(andyjaykobe)
展开
-
学习C++从入门到精通的的十本最经典书籍
1.《C++Primer》有“C++的百科全书”,C++程序员人手必备。对语法、语义的描述非常细致和严谨,适合有一定经验的C、C++程序员作为工具书和理论指导书使用,但由于其有一定深度,而没有进阶顺序的章节安排,所以不适合初学者做为教材使用,价格略高。难度:★★☆质量:★★★★★广度:★★★★★深度:★★★★性价:★★★☆ 2.《C++Primer Plus》转载 2011-11-12 22:12:06 · 1169 阅读 · 0 评论 -
C++ 多线程编程总结
在开发C++程序时,一般在吞吐量、并发、实时性上有较高的要求。设计C++程序时,总结起来可以从如下几点提高效率:并发异步缓存下面将我平常工作中遇到一些问题例举一二,其设计思想无非以上三点。1任务队列1.1 以生产者-消费者模型设计任务队列 生产者-消费者模型是人们非常熟悉的模型,比如在某个服务器程序中,当User数据被逻辑模转载 2014-07-05 22:41:42 · 1066 阅读 · 0 评论 -
C/C++刁钻问题各个击破之细说sizeof
摘要:Sizeof的作用非常简单:求对象或者类型的大小。然而sizeof又非常复杂,它涉及到很多特殊情况,本篇把这些情况分门别类,总结出了sizeof的10个特性:(0)sizeof是运算符,不是函数;(1)sizeof不能求得void类型的长度;(2)sizeof能求得void类型的指针的长度;(3)sizeof能求得静态分配内存的数组的长度!(4转载 2014-11-06 12:57:55 · 1084 阅读 · 0 评论 -
构建C协程之ucontext篇
原理简介所谓 “ucontext” 机制是 GNU C 库提供的一组用于创建、保存、切换用户态执行“上下文”(context)的API,可以看作是 “setjmp/long_jmp” 的“升级版”,主要包括以下四个函数:void makecontext(ucontext_t *ucp, void (*func)(), int argc, ...);int swap转载 2014-12-06 22:18:09 · 8988 阅读 · 0 评论 -
构建C协程之setjmp/long_jmp篇
原理简介在标准C中的头文件中定义了一组函数 setjmp / long_jmp 用来实现“非本地跳转”的功能,利用 setjmp 可以保存当前执行线索状态,稍后通过 long_jmp 函数可以实现状态的恢复,并且可以跨多层函数调用栈进行跳转。具体接口定义如下:int setjmp(jmp_buf env) 该函数主要用来保存当前执行状态,作为后续跳转的目标。调用时,当前转载 2014-12-06 22:16:45 · 10593 阅读 · 2 评论 -
构建C协程之概述
什么是“协程”?“协程”(“coroutine”),有时也叫做“用户线程”、“纤程” (“fiber”)等,是一种轻量级用户执行线索,其特点是调度和切换都发生在用户态,无需内核干预,因此切换代价较小,特别适合实现一些高并发类的系统应用 —— 比如 Web 服务器 —— 每个链接的服务历程都可以用“协程”来实现,当某个链接遇到I/O阻塞时,可以快速切换到其他执行线索,从而大大提高了系统整体的转载 2014-12-06 21:40:03 · 1453 阅读 · 0 评论 -
协程实现的基础
协程可以认为是一种用户态的线程,与系统提供的线程不同点是,它需要主动让出CPU时间,而不是由系统进行调度,即控制权在程序员手上。既然看成是用户态线程,那必然要求程序员自己进行各个协程的调度,这样就必须提供一种机制供编写协程的人将当前协程挂起,即保存协程运行场景的一些数据,调度器在其他协程挂起时再将此协程运行场景的数据恢复,以便继续运行。这里我们将协程运行场景的数据称为上下文。在li转载 2014-12-07 21:13:59 · 2423 阅读 · 0 评论 -
Zookeeper开发常见问题
背景与目的Zookeeper开发过程中遇到一些常见问题,为了后续开发不犯同样的错误,总结一下此类问题,并进行分析和解决。适合人员主要适合zookeeper开发、测试及运维相关人员。问题与解决一、 关于zookeeper_init函数的使用问题描述:开发人员在调用zookeeper_init函数时,若返回一个非空句柄zhan转载 2014-12-07 21:40:04 · 10438 阅读 · 1 评论 -
Java协程框架-Kilim字节码剖析
前面几篇文章从代码层面介绍了Kilim的基本原理,但是对于其中的一些细节,比如Task的执行状态如何管理等问题从代码上依然得不到答案,本文即再深入到字节码层面来解答。1. Kilim字节码改写前后的代码有什么区别?这里还是先上Kilim官方文档中的一张图,这张图清晰的展现出原始的代码与经Kilim改写后的协程代码。可以看出左边的原始代码,与我们常见的函数相比有所不同,这里显示声明原创 2015-05-02 19:35:07 · 2299 阅读 · 0 评论 -
进程上下文切换 – 残酷的性能杀手
对于服务器的优化,很多人都有自己的经验和见解,但就我观察,有两点常常会被人忽视 – 上下文切换 和 Cache Line同步 问题,人们往往都会习惯性地把视线集中在尽力减少内存拷贝,减少IO次数这样的问题上,不可否认它们一样重要,但一个高性能服务器需要更细致地去考察这些问题,这个问题我将分成两篇文章来写:1)从一些我们常用的用户空间函数,到linux内核代码的跟踪,来看一个上下文切换是如何转载 2014-07-05 22:20:23 · 1613 阅读 · 0 评论 -
程序员技术练级攻略
程序员技术练级攻略月光博客6月12日发表了《写给新手程序员的一封信》,翻译自《An open letter to those who want to start programming》,我的朋友(他在本站的id是Mailper)告诉我,他希望在酷壳上看到一篇更具操作性的文章。因为他也是喜欢编程和技术的家伙,于是,我让他把他的一些学习Python和Web编程的一些点滴总结一下。于是他给转载 2013-01-02 23:20:21 · 3782 阅读 · 3 评论 -
深度探索C++对象模型
内容简介 Inside The C++ Object Model专注于C++对象导向程序设计的底层机制,包括结构式语意、暂时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这本书让你知道:一旦你能够了解底层实现模型,你的程序代码将获得多么大的效率。Lippman澄清了那些关于C++额外负荷与复杂度的各种错误信息和迷思,但也指出其中某些成本和利益交换确实存在。他阐述了各式各样的转载 2012-08-19 01:21:56 · 1499 阅读 · 0 评论 -
Effective C++
EffectiveC++以条款是原作者实际开发中总结出的经验。看书要温故知新,无他,列一列书目录,以帮助自己及读者加深印象。第一章 从C转向C++ 条款1:尽量用const和inline而不用#define 条款2:尽量用而不用 条款3:尽量用new和delete而不用malloc和free 条款4:尽量使用c++风格的注释第二章 内存管理 条款5:对应的new转载 2012-08-19 01:21:17 · 799 阅读 · 0 评论 -
C++必知必会
条款1数据抽象 1 条款2 多态 2 条款3 设计模式 5 条款4 STL 8 条款5 引用是别名而非指针 10 条款6 数组形参 13 条款7 常量指针与指向常量的指针 16 条款8 指向指针的指针 19 条款9 新式转型操作符 21 条款10 常量成员函数的含义 25 条款11 编译器会在类中放转载 2012-08-19 01:16:24 · 870 阅读 · 0 评论 -
More Effective C++
一、基础议题Item 1. 区分指针和引用Item 2. 优先考虑C++风格的类型转换Item 3. 决不要把多态用于数组Item 4. 避免不必要的默认构造函数二、运算符Item 5. 小心用户自定义的转换函数Item 6. 区分自增运算符和自减运算符的前缀形式与后缀形式Item 7. 不要重载"&&"、"||"和","Item 8. 理解new和dele转载 2012-08-19 01:21:31 · 777 阅读 · 0 评论 -
为什么每个程序员都应该学习C语言?
每个程序员在他们的编程生涯中都应该学习C语言,因为它有太多难以忽视的好处了。除了它会给你提供更多的工作机会之外,C语言还会教给你更多的关于计算机的知识。它能给我们提供的裨益,简单列举如下: 1)相比较其他的编程语言(像C++,JAVA),C语言是个低级语言。从总体上来说,低级的编程语言可以让你更好的了解计算机。 2)设备驱动程序和操作系统只能用C语言来编写。现在,你转载 2012-08-19 01:01:14 · 1157 阅读 · 0 评论 -
如何学好C语言
如何学好C语言今天晚上我看到这篇文章。http://programmers.stackexchange.com/questions/62502/small-c-projects我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:原创 2013-01-02 22:29:10 · 1246 阅读 · 0 评论 -
为什么C和C++牛人多?
在我们学校里,职场里面,确实有一种看法,玩C和C++的人,水平通常要高一点,而做Java和.net的朋友呢,总是有种要受歧视的感觉。现在虽然好点了,Java多年媳妇熬成婆,已经成为使用率最高的编程语言,Java的粉丝,终于可以喘口气了,狠狠滴BS一下C和C++,呵呵。其他几门语言也在奋起直追。大家总结了很多批评C和C++的话,不是完全的面相对象,太低级,语言太简陋,不是一门程序员友好的语言转载 2012-09-09 18:17:21 · 2374 阅读 · 1 评论 -
如何学好C++语言
如何学好C++语言昨天写了一篇如何学好C语言,就有人回复问我如何学好C++,所以,我把我个人的一些学习经验写在这里,希望对大家有用。首先,因为如何学好C语言中谈到了算法和系统,所以这里就只谈C++语言。· C++是最难的语言。这个世界上最难的编程语言可能非C++莫属了。你千万不要以为几天就可以学好C++,C++的学习曲线是相当BT的,你可以看看这篇文章。C++是一门很自由转载 2013-01-02 22:42:41 · 1659 阅读 · 0 评论 -
协程 及 Libco 介绍
libco 是腾讯开源的一个协程库,主要应用于微信后台RPC框架,下面我们从为什么使用协程、如何实现协程、libco使用等方面了解协程和libco。 why协程为什么使用协程,我们先从server框架的实现说起,对于client-server的架构,server最简单的实现:while(1) {accept();recv();do();send();}串行地接收连接、读取请求、转载 2015-07-21 22:13:48 · 6895 阅读 · 0 评论