.symtab 符号表由汇编器构造,使用编译器输出到汇编语言 .s 文件中的符号,存放程序中定义和引用的函数和全局变量的信息,包括了三类不同的符号:
- 由模块 m 定义并能被其他模块引用的全局符号;
- 由其他模块定义并被模块 m 引用的全局符号;
- 只被模块 m 定义和引用的本地符号。
.symtab 中的符号表不包含对应于本地非静态程序变量的任何符号,这些符号既不在 .data 节,也不在 .bss 节,是在运行时在栈中被管理,链接器对此此类符号不处理。
但是用 static 限定的内部变量却是例外,尽管其只能在该函数中使用,但是它一直占据存储器空间,并不伴随函数调用而产生和函数退出而消失。 其并不在栈中管理,而是由编译器在 .data 或 .bss 为其分配空间,并在符号表中创建一个有惟一名字的本地链接器符号。
[ Read More » ]
29 6 月, 2012 in
Software | tags:
CSAPP |
No Comments
链接(linking)是将各种代码和数据部分收集起来合并为一个单一文件的过程,这个文件可以被加载(或拷贝)到存储器并执行。其可以执行于编译时(compile time),也可以是加载时(load time),或者运行时(run time),由链接器(linker)执行,其使得分离编译(separate compilation)成为可能。
静态链接器(static linker)以一组可重定位目标文件和命令行参数作为输入,生成一个完全链接的可以加载和运行的可执行目标文件作为输出。输入的可重定位目标文件(relocatable object file)由各种不同的代码和数据节(section)组成,指令、初始化的全局变量、未初始化的变量分别在不同的节当中。
[ Read More » ]
27 6 月, 2012 in
Software | tags:
CSAPP |
No Comments
本篇博文是在观看 Google I/O 2011 : Memory Management for Android App 所做的笔记之一,主要篇幅是传递演讲者 Patrick Dubroy 的观点,小部分则掺杂了自己的理解。这里的观点可能包含了谬误,或者是过时信息,因此建议读者如果英语能力尚可,则不妨直接观看原视频或者演示文稿,–需翻墙。
Android 日志是开发者审视系统、应用运行状况的得力助手,它就像是驾驶员面前的仪表盘,车辆的时速、里程、油量等数据关系到行驶安全,而日志中的 GC 信息则反馈了系统、应用健康状况,细心的开发者甚至可以判定是不是发生了内存泄漏。
[ Read More » ]
21 6 月, 2012 in
Software | tags:
Android,
GC,
VM |
No Comments
编写高效代码就是善待你的用户,每节省一个时钟周期、一字节网络流量,就是善事一桩,善小亦为之,日久功德无量。
首先,动手之前,选择出合适的算法和数据结构;其次,编写出的源代码应该让编译器能够有效优化,以生成成高效可执行代码;最后,针对处理运算量特别大的计算,要能将一个任务分成多个部分,这些部分可以在多核或多处理器的某种组合上并行地计算。
[ Read More » ]
5 6 月, 2012 in
Software | tags:
CSAPP |
No Comments
流水线化的目的就是每个时钟周期都发射一条指令,也就是说每个时钟周期都有一条新指令进入执行阶段,同时有一条旧指令退出执行流程。
流水线化会增加吞吐量(throughout),但同时也会增加一条指令从头到尾执行的全部时间,即延迟(latency),–延迟增加的原因是,多出来的流水线寄存器的时间开销。
流水线阶段之间的指令转移由时钟信号控制,并且时钟信号控制在每隔特定的时间间隔加载流水线寄存器。流水线寄存器采用时钟寄存器,其由时钟信号控制加载输入值,信号转播到流水线寄存器的输入,直到时钟上升时,才会改变寄存器的状态。用来保存程序计数器(PC)、条件代码(CC)和程序状态(Stat)等。
[ Read More » ]
14 5 月, 2012 in
Software | tags:
CSAPP |
No Comments