一个典型的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代码描述如下:

  1. >>> layout = ['text', 'data', 'bss', 'heap', 'stack']
  2.  
  3. >>> abbr = ''
  4. >>> i = 0
  5. >>> for s in layout:
  6. ... abbr += s[i]
  7. ... i += 1
  8. ...
  9. >>> print abbr.upper()
  10. TASPK
  11.  
  12. >>> abbr = ''
  13. >>> for s in layout:
  14. ... abbr += s[-1]
  15. ...
  16. >>> print abbr.upper()
  17. TASPK

tas: 正好是我在Sun/Oracle公司的STC代码库所在的服务器名,跟tas打交道10多年了,自然记得住了;

pk: 这个词太熟悉不过了,PK者,单挑也(重庆话:对挖(3声))。

于是"TASPK"可记忆为跟tas PK, 他(ta)死(s)!

另外,如果想彻底搞明白text, data, bss等请阅读ELF文件格式相关文献。 推荐阅读CSAPP一书的第7章Linking。

用一个词(TASPK)牢记C程序内存布局的更多相关文章

  1. C语言程序内存布局

    C语言程序内存布局 如有转载,请注明出处:http://blog.csdn.net/embedded_sky/article/details/44457453 作者:super_bert@csdn 一 ...

  2. 一起talk C栗子吧(第一百三十一回:C语言实例--C程序内存布局三)

    各位看官们,大家好.上一回中咱们说的是C程序内存布局的样例,这一回咱们继续说该样例.闲话休提,言归正转.让我们一起talk C栗子吧. 看官们,关于C程序内存布局的样例,我们在前面的两个章回都介绍过了 ...

  3. C++程序内存布局

      代码区(code area) 程序内存空间 全局数据区(data area) 堆区(heap area) 栈区(stack area) 一个由C/C++编译的程序占用的内存分为以下几个部分, 1) ...

  4. C程序内存布局

    作为计算机专业的来说,程序入门基本都是从C语言开始的,了解C程序中的内存布局,对我们了解整个程序运行,分析程序出错原因,会起到事半功倍的作用 . C程序的内存布局包含五个段,分别是STACK(栈段), ...

  5. linux C 程序内存布局

    参考: 1. http://www.cnblogs.com/clover-toeic/p/3754433.html 2. http://www.cnblogs.com/jacksu-tencent/p ...

  6. Linux C程序内存空间

    linux下内存空间布置: 一个典型的Linux C程序内存空间由如下几部分组成: 代码段(.text).这里存放的是CPU要执行的指令.代码段是可共享的,相同的代码在内存中只会有一个拷贝,同时这个段 ...

  7. Unix下C程序内存泄露检测工具:valgrind的安装使用

    Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Goo ...

  8. ESP32应用程序的内存布局

    应用程序内存布局 ESP32芯片具有灵活的内存映射功能.本节介绍ESP-IDF在默认情况下如何使用这些功能. ESP-IDF中的应用程序代码可以放置在以下内存区域之一中. IRAM(指令RAM) ES ...

  9. c++内存布局与c程序的内存布局

    c/c++的内存布局:堆,栈,自由存储区(与堆的区别),全局/静态存储区,常量存储区(字符串常量,const常量) http://www.cnblogs.com/QG-whz/p/5060894.ht ...

随机推荐

  1. 使用 FireMonkey 构建优秀专业 Android 应用的10点提示

    原文链接:http://www.firemonkeyx.com/ten-tips-for-building-stunning-professional-android-apps-with-firemo ...

  2. MVC4 4种Filter

    1. AuthorizationFilter: 从命名上看这个用于完成授权相关的工作. AuthorizationFilter 实现了 IAuthorizationFilter 接口, 如果我们希望执 ...

  3. Android-下载网上图片

    下载操作相关代码: package liudeli.async; import android.app.Activity; import android.app.ProgressDialog; imp ...

  4. LightOJ 1234 Harmonic Number(打表 + 技巧)

    http://lightoj.com/volume_showproblem.php?problem=1234 Harmonic Number Time Limit:3000MS     Memory ...

  5. 「HNOI 2014」 江南乐

    \(Description\) \(n\)堆石子,每堆石子有\(s_i\)个,两个人轮流操作,每次可以将一对不少于\(F\)的石子尽量平均分成\(m\)堆,\(m\)每次自选,不能操作者输.共有\(T ...

  6. 清北学堂2019NOIP提高储备营DAY3

    今天是钟神讲课,讲台上照旧摆满了冰红茶 目录时间到: $1. 动态规划 $2. 数位dp $3. 树形dp $4. 区间dp $5. 状压dp $6. 其它dp $1. 动态规划: ·以斐波那契数列为 ...

  7. NetEaseGame/ATX 的MD

    # ATX(AutomatorX) (中文版)[![Build Status](https://travis-ci.org/NetEaseGame/ATX.svg?branch=master)](ht ...

  8. gulp 图片、样式、js、实时刷新等压缩gulpfile.js文件各个模块

    1.压缩tinypng图片   gulp-tinypng-nokey,但不压缩gif格式(另外一个gulp-imagemin压缩率不高,可以压缩gif格式) // 获取 gulp var gulp = ...

  9. “全栈2019”Java第四十五章:super关键字

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  10. Your branch is ahead of 'origin/master' by 1 commit.

    git reset HEAD^ --soft git reset HEAD^ --hard --soft 表示保留当前commit,重新commit --hard 表示丢弃当前add,重新add.co ...