一个典型的C程序内存布局,从低地址到高地址分别为:
1. text (正文段,即代码段 Code Segment)
2. data (已经初始化的数据段)
3. bss (未被初始化的数据段 Block Started by Symbol)
4. heap (堆)
5. stack (栈)
注1:上图中的Code segement 即text。
于是,采用缩写词记忆法如下所示:
- 对第1个单词text取其第1个字符t,
- 对第2个单词data取其第2个字符a,
- 对第3个单词bss取其第3个字符s,
- 对第4个单词heap取其第4个字符p,
- 对第5个单词stack取其第5个字符k,
那么缩写词就是taspk, 大写为TASPK. (或者对所有单词都取最后一个字符,也是taspk)。用Python代码描述如下:
>>> layout = ['text', 'data', 'bss', 'heap', 'stack'] >>> abbr = '' >>> i = 0 >>> for s in layout: ... abbr += s[i] ... i += 1 ... >>> print abbr.upper() TASPK >>> abbr = '' >>> for s in layout: ... abbr += s[-1] ... >>> print abbr.upper() TASPK
tas: 正好是我在Sun/Oracle公司的STC代码库所在的服务器名,跟tas打交道10多年了,自然记得住了;
pk: 这个词太熟悉不过了,PK者,单挑也(重庆话:对挖(3声))。
于是"TASPK"可记忆为跟tas PK, 他(ta)死(s)!
另外,如果想彻底搞明白text, data, bss等请阅读ELF文件格式相关文献。 推荐阅读CSAPP一书的第7章Linking。