• 剖析内存中的程序之秘

    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吧~ 先看一眼效果图: 是不是乍一看还挺炫酷。功能上也还好,至少简单的标注工作都能完成了。那么让我们来

    阅读全文...

  • C++ 程序内存泄漏检测方法

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

    一、前言 在Linux平台上有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容易形成“统一”的标准。而在Windows平台,服务器和客户端开发人员惯用的调试方法有很大不同。下面结合我的实际经验,整理下常见定位内存泄漏的方法。 注意:我们的分析前提是Release版本,因为在Debug环境下,通过VLD这个库或者CRT库本身的内存泄漏检测函数能够分析出内存泄漏,相对

    阅读全文...

  • C++ STL 内存配置的设计思想与关键源码分析

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

    说明:我认为要读懂STL中allocator部分的源码,并汲取它的思想,至少以下几点知识你要了解:operator new和operator delete、handler函数以及一点模板知识。否则,下面你很可能看不大明白,补充点知识再学习STL源码比较好。 下面会结合关键源码分析C++STL(SGI版本)的内存配置器设计思想。关键词既然是“思想”,所以重点也就呼之欲出了。 1、allocator的简短介绍 我阅读的源码是SGI公司的版本,也是看起来最清楚的

    阅读全文...