2010年11月2日

大规模C++软件开发 - notes

摘要: 1.循环依赖2.过度的连接时依赖3.过多的编译时依赖4.全局名称空间5.逻辑设计和物理设计 小结: C++是一个整体而不是仅仅是c的一个扩充。编译单元中间的循环“连接时依赖”会使程序难以理解、测试和重用。不需要的或过多的“编译时依赖”会增加编译开销并且不利于维护。当项目很大时,采用无组织的、无规程的或幼稚的C++开发方法,最终一定会出现这些问题。 大多数有关C++设计的书只阐述逻辑问题(类、... 阅读全文

posted @ 2010-11-02 15:38 胡是 阅读(522) 评论(0) 推荐(0) 编辑

2010年10月22日

Linux共享库的组织 - notes

摘要: 程序设计语言与ABIABI对于不同的语言来说,主要包括一些诸如函数调用的堆栈结构、符号命名、参数规则、数据结构的内存分布等方面的规则。共享库版本命名规则libname.so.x.y.zname 表示库名字x 表示主版本号y 表示次版本号z 表示发布版本号相同主版本号与次版本号的共享库,不同发布版之间应完全兼容。SO-NAMESO-NAME 是共享库的文件名去掉次版本号和发布版本号,保留主版本号后的... 阅读全文

posted @ 2010-10-22 12:40 胡是 阅读(401) 评论(0) 推荐(0) 编辑

2010年10月20日

弱符号与强符号概念

摘要: 弱符号与强符号概念链接过程实质上就是把不同目标文件粘在一起,对不同目标文件中定义或引用的相同名字进行决议resolve和绑定binding。符号的分类如下:定义在本目标文件中的全局符号,可以被其它文件引用。在本目标文件中引用的全局符号,却没有定义在本目标文件,这一般叫做外部符号(External Symbol), 也就是我们前所谓符号引用。段名,这种符号通常由编译器产生,它的值就是该段的起始地址。... 阅读全文

posted @ 2010-10-20 09:04 胡是 阅读(7444) 评论(1) 推荐(1) 编辑

2010年9月22日

Makefile中的变量扩展问题

摘要: make执行的两个阶段: In the first phase, make reads the makefile and any included makefiles. At this time, variables and rules are loaded into make’s internal database and the dependency graph is created. In ... 阅读全文

posted @ 2010-09-22 23:33 胡是 阅读(637) 评论(0) 推荐(0) 编辑

2010年9月20日

Makefile中的 Automatic Variables 含义

摘要: $@ The filename representing the target. $% The filename element of an archive member specification. $< The filename of the first prerequisite. $? The names of all prerequisites that are newer than... 阅读全文

posted @ 2010-09-20 13:28 胡是 阅读(339) 评论(0) 推荐(0) 编辑

2010年9月19日

Autoscan

摘要: The autoscan program can help you create and/or maintain a ‘configure.ac’ file for a software package. autoscan examines source files in the directory tree rooted at a directory given as a command lin... 阅读全文

posted @ 2010-09-19 17:42 胡是 阅读(786) 评论(0) 推荐(0) 编辑

2010年9月18日

作用域与生存期

摘要: 在《程序设计语言原理》(第8版)中,作者这样描述作用域和生存期这两个经常搅在一起的概念。 有时,变量的作用域与生存期似乎是相关的。例如,考虑一个在不包含方法调用的Java方法中声明的变量。这个变量的作用域是从它的声明到这个方法的结尾。它的生存期开始于方法进入之时,终止于方法执行完毕之时。虽然变量的作用域与生存期显然不是同一件事情:静态作用域是文本或空间的概念,而生存期是时间的概念,但至少在这个情形... 阅读全文

posted @ 2010-09-18 14:21 胡是 阅读(694) 评论(0) 推荐(0) 编辑

语言设计中的折中(权衡tradeoff)

摘要: 在《程序设计语言原理》(第8版)中,作者这样描述语言设计中的取舍问题。 可靠性 vs 执行代价 两个相互矛盾的标准时可靠性与执行代价。例如,Java语言的定义要求:必须对所有数组元素的引用进行检测,以保证所有下标都在合法的范围之内。这个步骤给包含大量数组元素引用的Java程序增加了很大的执行代价。C语言不要求进行下标范围的检测,所以C程序的执行速度比语义上相同的Java程序要快;当然Java程序则... 阅读全文

posted @ 2010-09-18 13:17 胡是 阅读(599) 评论(0) 推荐(0) 编辑

Lisp引入的程序设计语言重要概念

摘要: 递归函数 Lisp编程是基于函数和递归的(解决的是部分递归函数集),而不是基于赋值和循环的。 列表 早期Lisp的基本数据结构是 cons cell 。现代Lisp中 cons cell 主要是用于构建列表,而把列表作为基本数据结构。列表这种数据结构非常有用。另外,Lisp把内存看成很多 cons cell 的集合,在此基础上构建出的非数值编程抽象机比用数组构建出的要有用的多,数组是计算机科学的早... 阅读全文

posted @ 2010-09-18 11:31 胡是 阅读(226) 评论(0) 推荐(0) 编辑

Lisp 的 Mark-and-Sweep 垃圾收集

摘要: 把所有的标志位 置 0; 从程序直接访问的内存单元开始,顺着所有的指针链,把所经过的所有单元的标志位置为 1; 把所有标志位仍是 0 的单元放在空闲空间列表里面。 阅读全文

posted @ 2010-09-18 11:21 胡是 阅读(242) 评论(0) 推荐(0) 编辑

导航