• C++ 11 常用特性的使用经验总结

    Posted by : lon.y@qq.com on 2017年7月4日

    C++11已经出来很久了,网上也早有很多优秀的C++11新特性的总结文章,在编写本博客之前,博主在工作和学习中学到的关于C++11方面的知识,也得益于很多其他网友的总结。本博客文章是在学习的基础上,加上博主在日常工作中的使用C++11的一些总结、经验和感悟,整理出来,分享给大家,希望对各位读者有帮助,文章中的总结可能存在很多不完整或有错误的地方,也希望读者指出。大家可以根据如下目录跳到自己需要的章节。 1、关键字及新语法 C++11相比C++98增加了许多

    阅读全文...

  • 如何在 Linux 下检测内存泄漏

    Posted by : lon.y@qq.com on 2017年7月4日

    1.开发背景 在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程序,而后调试器将在退出程序时,打印出程序运行过程中在堆上分配而没有释放的内存信息,其中包括代码文件名、行号以及内存大小。该功能是 MFC Framework 提供的内置机制,封装在其类结构体系内部。 在 linux 或者 unix 下,我们的 C++ 程序缺乏相应的手段来检测内存信息,而只能使用 top 指令观察进程的动态内存总额。而且程序退出时,我们无法获知任何

    阅读全文...

  • 游戏热更新杂谈

    Posted by : lon.y@qq.com on 2017年7月4日

    热更新的内容可以是美术资源,可以是代码,但相对来说,美术资源的更新不会受到约束,代码实际上是重灾区。本文介绍的主要是代码热更新。 热更新对于开发者来说是一件麻烦事,特别对于看重效率、便捷性和结构的程序员来说,热更新就是运营人员的不懂技术的表现。然而,对于上线才是刚刚开始的网络游戏,特别是手游来说。热更新是极为重要的基础功能。 为什么要热更新? 客户端 适应上线需求 对于手游客户端来说,受到苹果审核的约束,一次审核提交需要10~20天不等的等待时间,而这段时

    阅读全文...

  • C++11 新特性之容器相关特性

    Posted by : lon.y@qq.com on 2017年7月4日

    前三篇在这里: C++11新特性之新类型与初始化:  http://blog.jobbole.com/102728/ C++11新特性之类型推断与类型获取:  http://blog.jobbole.com/104559/ C++11新特性之lambda:http://blog.jobbole.com/104548/ 这是C++11新特性介绍的第四部分,涉及到C++11这次更新中与容器有关的新特性。 不想看toy code的读者可以直接拉到文章最后看这部分

    阅读全文...

  • 用现代 C++ 写一个高性能的服务器

    Posted by : lon.y@qq.com on 2017年7月4日

    首先感谢大家对上一篇博文《用 C++ 开启技术创业之旅》的反馈。在上篇文章中我提到我曾在一天内就凭借 Facebook 的 Wangle 搭建起一个数据库引擎的原型,在这里我会解释我是如何做到的。到本文最后,你将可以用 Wangle 编写出一个高性能的C++服务器。本文也将作为教程整合进 Wangle 的 ReadMe.md 中。 我将展示如何使用现代C++编写一个Echo服务器,相当于分布式系统开发中的“Hello World”。这个服务器会将接收的消息

    阅读全文...

  • 如何使用 C++ 11 实现 C# 属性概念设计

    Posted by : lon.y@qq.com on 2017年7月4日

    1、概述 本人对“C++实现C#属性概念”的研究决定并非一时冲动,而是原自于对技术的热爱。 用过C#的C渣渣程序员/媛都非常喜欢C#里面的属性的概念(注意,C#里的属性和成员变量之间是有区别的),可是C渣渣里并没有属性这个概念,于是,很多程序员/媛都想办法使用C渣渣抽象出类似C#中的属性的概念,当然我也不例外。 看过很多网友and同事写的C++属性实现方案,But似乎都没有找到很符合口味的实现,不是太难看懂就是太难使用。 so,本文介绍的是博主在工作过程中

    阅读全文...

  • 用 C++ 开启技术创业之旅

    Posted by : lon.y@qq.com on 2017年7月4日

    我和一个大学的老朋友 Fedor Dzjuba ,创立了一家名为 Signal Analytics 的技术公司。我们通过构建自己的数据库系统来打造一个现代的、基于云的 OLAP 数据集(多维数据存储和检索)。 由于我主导技术层面并且我最熟悉 C++,所以决定用它来构建我们的 OLAP 引擎。虽然我最初的确用 Rust 来构建原型,但是那样做风险太大了(我应该另外写一篇文章来解释更多关于这个决定的细节)。 我的很多同行觉得很奇怪,因为我用 C++ 而没有用一

    阅读全文...

  • 面向 C++ 的测试驱动开发

    Posted by : lon.y@qq.com on 2017年7月4日

    测试驱动开发(TDD)背景及综述 测试驱动开发是 Kent 提出的一种新的软件开发流程,现在已广为人知,这种开发方法依赖于极短重复的开发周期,面对开发需求,开发人员要先开发代码测试用例,这些代码实现的测试用例定义了工程要实现的需求,然后去开发代码快速测试通过这这些用例,这个时候的代码是相对比较粗糙的,只是为了通过这个测试,测试通过以后,这些测试所覆盖的需求就会相对固定下来了,然后随着实现更多的需求,以前实现的那些粗糙的代码的问题会逐步的暴露出来,此时就要用

    阅读全文...

  • C++ 异常处理机制的实现

    Posted by : lon.y@qq.com on 2017年7月4日

    本文深入讨论了VC++编译器异常处理的实现机制。附件源代码包含了一个VC++的异常处理库。 下载源代码 – 19 Kb 介绍 相对于传统语言,C++ 的革命性特征之一,就是它对异常处理的支持。传统异常处理技术有缺陷并且易于出错,而 C++ 提供了一个非常优秀的替代方案。它将正常流程代码与错误处理代码清晰的隔离出来,使得程序更加健壮,易于维护。这篇文章将讨论编译器是如何实现异常处理的。假定读者已经对异常处理机制及其语法已经有了大致的了解。我用 VC++ 实现

    阅读全文...

  • C++ 11 开发中的 Atomic 原子操作

    Posted by : lon.y@qq.com on 2017年7月4日

    原子操作在多线程开发中经常用到,比如在计数器,序列产生器等地方,这类情况下数据有并发的危险,但是用锁去保护又显得有些浪费,所以原子类型操作十分的方便。 原子操作虽然用起来简单,但是其背景远比我们想象的要复杂。其主要在于现代计算系统过于的复杂:多处理器、多核处理器、处理器又有核心独有以及核心共享的多级缓存,在这种情况下,一个核心修改了某个变量,其他核心什么时候可见是一个十分严肃的问题。 同时在极致最求性能的时代,处理器和编译器往往表现的很智能,进行极度的优化

    阅读全文...