0%

align-regexp

相必大家都用过 C-M-\,一般都能满足需要,可是有时候需要按一行中的某些字符对齐,比如一些变态的语言或者编程规范规定赋值语句需要按 "=" 对齐,那怎么办?

Read more »

之前学 elisp 的时候一直感觉思维转不过来很纠结,看了 The Nature of Lisp,原来正如 Code Complete - Laying the Foundation 章节讲的那样,我们认识新事物总是会借鉴思维里面已有的 Metaphor, 我只用过 C, C++, Java,Python, Objective-C, 也就意味着我基本只有这些语言的 metaphor,都跟 Lisp 差异很大,也难怪了。但也正因为如此,才需要不断的克服自身的排斥心理,去接触更多的新事物。

正如书中所云:

Read more »

上一篇提到过,第二级 alloc 在分配大于 128 bytes 的时候,直接使用第一级 alloc,如果小于 128 bytes 才采用内存池的方式进行内存分配。

分配过程是这样的,每次分配一大块内存,存到一个 free list 中,下次 client 若再有相同大小的内存要求,就直接从这个 free list 中划出,内存释放时,则直接回收到对应的 list 中。为了管理的方便,实际分配的大小都被调整为 8 的倍数,所以有 16 个 free lists,分别为 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128 bytes。例如需要 20 bytes,将会被自动调整为 24 bytes。free lists 的结构如下

Read more »

在分析了对象的构建和析构之后,我们接着看对象构建所基于的内存空间是如何分配和释放的。这一功能是由 stl_alloc 提供的。之前提到过 allocate,在 SGI STL 中是不使用的,因为其只是对 new 和 delete 进行了简单的封装,并且加上了这段代码

1
set_new_handler(0);
Read more »

在做单元测试过程中,经常需要对被测程序的一些函数实现 stub,下面三个文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// product.c
#include <stdio.h>
void lib_pro()
{
printf("I'm in lib\n");
}
// user.c
int main(int argc, char *argv[])
{
lib_pro();
return 0;
}
// stub.c
#include <stdio.h>
void lib_pro()
{
printf("I am in fake lib\n");
}
Read more »

使用 Emacs 大概也有大半年了,越用越觉得它的强大,始终都有惊喜,每次看到一个功能,心中想:Emacs 可以吗?答案真的往往会是 Yes!

1
2
3
4
(defun factorial (n)
(if (<= n 1)
1
(* n (factorial (- n 1)))))
Read more »