- 博客(14)
- 收藏
- 关注
原创 外壳模式(shell)
《系统程序员成长计划》这本书中提到了外壳模式的概念。所谓的外壳模式的作用就是:不需要修改原来的应用程序,而控制它的输入和输出(即用户界面),同时应用程序也不知道外壳的存在。当然这样理解会比较麻烦,我们就举个简单的例子,比如已经存在一个应用程序,我们想给该应用程序增添一个新的用户界面,这里有两种选择:1. 根据该应用程序的内部实现重新编写一个用户界面,但是如果原来的应用程序的用户界面和内部实现没有很
2013-12-22 17:54:33 976
转载 编写你的第一个垃圾收集器
原文链接: Bob Nystrom 翻译: 伯乐在线 - deathmonkey译文链接: http://blog.jobbole.com/53376/每当我倍感压力以及有很多事情要做的时候,我总是有这样一种反常的反应,那就是希望做一些其他的事情来摆脱这种状况。通常情况下,这些事情都是些我能够编写并实现的独立的小程序。一天早上,我几乎要被一堆事情给整疯了——我得写我
2013-12-22 12:47:46 700
原创 linux内存模型
最近在看李先静老师的《系统程序员成长计划》的书,李老师也在他的博客中写了有关内容:http://blog.csdn.net/absurd。当然这里所说的linux内存模型也是李老师博客中提到。这里自己再写出来,不是说自己写的比李老师好,而是为了增加自己的理解,习惯性的将东西写出来。在说linux中内存模型之前,我们先了解几个数据存放的概念:1. .bss段BSS(Block
2013-12-21 22:28:37 886
原创 字节对齐
为什么要写有关字节对齐的东西呢?字节对齐应该是最基础的问题了,我原以为对字节对齐比较了解了。但是最近遇到了字节对齐的麻烦事。说麻烦其实也不麻烦,总而言之是自己对字节对齐没有理解透彻。所以就查查了字节对齐的具体定义和使用,发现自己对字节对齐的了解是很肤浅的。那么为什么要字节对齐呢?因为各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些构架
2013-12-21 21:54:26 610
原创 线程局部存储TLS
进程和线程实现并发,它们各自都有优缺点。进程是因为具有独立的进程地址空间,所以在创建进程和销毁进程时需要额外的开销,但是由于进程间的数据是独立的,因此一般情况下当一个进程出现意外死去的时候,是不会影响到其它线程的。但是线程和父线程共享全局变量,它只具有独立的堆栈空间和寄存器,虽然在创建线程和销毁线程时需要的开销比进程小很多,但是一般情况下当一个线程意外死去的时候,会导致整个主线程的崩溃。但是TLS
2013-12-20 14:08:48 773
原创 exit,_exit,return 的区别
exit和_exit 两个函数有一定的区别,在某些情况下是不能混用的。首先先看下exit在glibc-2.16.0中是什么定义的?voidexit (int status){ __run_exit_handlers (status, &__exit_funcs, true);}它是通过调用一个叫做__run_exit_handlers的函数实现的。那么__run_exit_handl
2013-12-18 23:21:08 2432
原创 共享内存mmap()和CreateFileMapping()
共享内存是进程间的一种通信机制,而且它的作用不止于此。它的主要作用包括:提高I/O效率,匿名内存映射,内存共享进程通信。两个不同进程共享内存的意思是,同一快物理内存映射到该两个进程的进程地址空间。使用共享内存可以通过mmap()返回的指针直接操作文件中的内容,省去了read,write以及lseek等文件读写的操作,提高了I/O效率。并且共享内存是一中效率较高的进程间的通信机制,因为当通信建立时,
2013-12-18 22:42:52 5432
转载 GCC 命令详解
GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。Gcc不仅功能强大,而且可以编译如C、C++、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言,而且Gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译
2013-12-16 16:20:49 9046
原创 嵌套锁与读写锁
互斥锁(mutex)是实现线程或进程同步与互斥的一种通信机制。它在不同平台下具有不同的实现形式。我们先介绍下linux和windows下的互斥锁的实现。
2013-12-16 14:57:44 5403
转载 ubuntu基本命令整理
sudo:如何设定/改变/启用 root 使用者的密码:sudo passwd root当你使用完毕后屏蔽 root 帐号 使用: sudo passwd -l root这个将锁住 root 帐号. 如何在终端机模式下切换到 root 身份: sudo -s -H在线安装程序:sudo apt-get install g++pt-get最常用参数:update
2013-12-12 16:35:09 771
原创 Linux下的静态库,共享库的创建和使用
编译程序一般要经过:预处理,编译,汇编和链接这几个步骤。在我们写程序的时候,会存在一些公共的代码。如果为每个程序都要重写这些代码,那么势必会造成太多的麻烦。我们可以将这么公共代码生成库文件,在编译程序的链接步骤中,可以静态地或者动态地将这些公共代码与我们的程序链接,这样就避免了重写这些代码的麻烦了。库文件可以分为静态库和共享库;其使用方式可以分为静态链接和动态链接两种类别。静态库: 在Linu
2013-12-10 17:53:12 911 2
转载 makefile的详细介绍
概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写m
2013-12-09 22:36:38 564
转载 vimtutor
文章来源: gvim7.0中自带的官方版本================================================================================ 欢 迎 阅 读 《 V I M 教 程 》 —— 版本 1.5 ==========================
2013-12-01 20:22:07 541
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人