• 如何编写 C++ 游戏引擎

    Posted by : lon.y@qq.com on 2018年6月6日

    最近我在用 C++ 写游戏引擎,再用这个引擎做了一个移动端小游戏跳一跳(Hop Out)。下面是截自我的 iPhone6 的一个小片段。 视频地址:http://preshing.com/images/hopoutclip.mp4 跳一跳是我想玩的游戏类型:3D卡通外观的复古街机游戏。目标是改变每个填充块的颜色,就像Q * Bert一样。 Hop Out仍在开发中,但引擎的功能已经很完善了,所以我想在这里分享一些关于引擎开发的技巧。 你为什么想要写一个游戏

    阅读全文...

  • gdb 如何调用函数?

    Posted by : lon.y@qq.com on 2018年5月1日

    在这周,我发现我可以从 gdb 上调用 C 函数。这看起来很酷,因为在过去我认为 gdb 最多只是一个只读调试工具。 我对 gdb 能够调用函数感到很吃惊。正如往常所做的那样,我在 Twitter 上询问这是如何工作的。我得到了大量的有用答案。我最喜欢的答案是 Evan Klitzke 的示例 C 代码,它展示了 gdb 如何调用函数。代码能够运行,这很令人激动! 我(通过一些跟踪和实验)认为那个示例 C 代码和 gdb 实际上如何调用函数不同。因此,在这

    阅读全文...

  • 剖析内存中的程序之秘

    Posted by : lon.y@qq.com on 2018年3月5日

    内存管理是操作系统的核心任务;它对程序员和系统管理员来说也是至关重要的。在接下来的几篇文章中,我将从实践出发着眼于内存管理,并深入到它的内部结构。虽然这些概念很通用,但示例大都来自于 32 位 x86 架构的 Linux 和 Windows 上。这第一篇文章描述了在内存中程序如何分布。 在一个多任务操作系统中的每个进程都运行在它自己的内存“沙箱”中。这个沙箱是一个虚拟地址空间(virtual address space),在 32 位的模式中它总共有 4G

    阅读全文...

  • 与 C 语言长别离

    Posted by : lon.y@qq.com on 2018年1月30日

     这几天来,我在思考那些正在挑战 C 语言的系统编程语言领袖地位的新潮语言,尤其是 Go 和 Rust。思考的过程中,我意识到了一个让我震惊的事实 —— 我有着 35 年的 C 语言经验。每周我都要写很多 C 代码,但是我已经记不清楚上一次我 创建一个新的 C 语言项目 是在什么时候了。 如果你完全不认为这种情况令人震惊,那你很可能不是一个系统程序员。我知道有很多程序员使用更高级的语言工作。但是我把大部分时间都花在了深入打磨像 NTPsec、 GPSD 以

    阅读全文...

  • 多线程编程基础知识

    Posted by : lon.y@qq.com on 2017年12月6日

    当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力。用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义。现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的。因此掌握多线程多任务设计方法对每个程序员都是必需要掌握的。本实例针对多线程技术在应用中经常遇到的问题,如线程

    阅读全文...

  • 提升 C++ 技能的 7 种方法

    Posted by : lon.y@qq.com on 2017年8月25日

    夏天时常会谈到大海、太阳、沙滩、大山或者你的家庭住宅。更充裕的时间也是夏天带来的好处之一。可能是因为你在休假,也可能是因为这段时间工作没有那么忙。无论是哪种情况,与一年中的其他季节相比,夏天的时间似乎更加宽裕。 你有两个选择:1)把所有夏季空闲时间都用来休整,适当放松一下没什么不可以。2)或者你可以投入一部分空闲时间来提升你的技能,尤其是 C++,用 C++ 水平的提高(boost C++)来开始新的一年。 如果你觉得选择1)更适合你,那么关掉手机和笔记本

    阅读全文...

  • 用 C 语言写一个简单的 Unix Shell(2)

    Posted by : lon.y@qq.com on 2017年8月9日

    在第一部分中我们讨论了 fork 系统调用以及它的注意事项。在本文中,我们将研究怎样执行命令。 这里将介绍 exec 函数家族。即以下函数: execl execv execle execve execlp execvp 为了满足需要,我们将使用 execvp,它的签名看起来像这样: int execvp(const char *file, char *const argv[]); 函数名中的 vp 表明:它接受一个文件名,将在系统 $PATH 变量中搜索

    阅读全文...

  • C++17 中那些值得关注的特性

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

    引用 C++17标准在2017上半年已经讨论确定,正在形成ISO标准文档,今年晚些时候会正式发布。本文将介绍最新标准中值得开发者关注的新特新和基本用法。 总的来说C++17相比C++11的新特性来说新特性不算多,做了一些小幅改进。C++17增加了数十项新特性,值得关注的特性大概有下面这些: constexpr if constexpr lambda fold expression void_t structured binding std::apply,

    阅读全文...

  • 用 C 语言写一个简单的 Unix Shell(1)

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

    【导读】:作者用 C 语言实现了一个简易的unix shell,通过本文可加深对 shell 和 Unix 系统原理的理解。 写 Unix shell 是我正在 RC 研究的一个项目。这是第一部分,后续会有一系列的文章。 免责声明:我不是编写 shell 这个课题的专家,我是一边自学一边分享我的发现。 shell 是什么? 关于这一点已经有很多书面资料,所以对于它的定义我不会探讨太多细节。只用一句话说明: shell 是允许你与操作系统的核心作交互的一个界

    阅读全文...

  • 一个简单粗暴的人脸认证标注工具的实现

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

    小喵的唠叨话:话说最近小喵也要开始写论文了,想了两周还是没有头绪,不知道该写些什么。恰好又被分配了一点标注数据的工作,于是乎想写点代码,休闲一下。结果也就是这篇博客。对了,小喵对GUI编程一窍不通,只知道Windows有MFC,Mac上的不知道。。。恰好听说过QT,而且知道这个界面库是跨平台的,也就选用了这个工具了。 那么现在开始和小喵一起瞎猫似的捯饬QT吧~ 先看一眼效果图: 是不是乍一看还挺炫酷。功能上也还好,至少简单的标注工作都能完成了。那么让我们来

    阅读全文...