运动的诗章:运行时数据结构 
    编程语言理论的经典对立之一就是代码和数据的区别。有些语言(如Lisp)把二者视为一体。其他语言(如C语言)通常维持两者的区别。Internet蠕虫非常难以被人们所理解,因为它的攻击方式的原理就是把数据转换为代码。代码和数据的区别也可以认为是编译时和运行时的分界线。编译器的绝大部分工作与翻译代码有关;必要的数据存储管理的绝大部分在运行时进行。本章描述运行时系统中隐藏的数据结构。

学习运行时系统的3个理由:

*它有助于优化代码,获得最佳的效率;
    *它有助于理解更高级的内容; 
    *当陷入麻烦时,它可以使分析问题更加容易。

a.out它是“assembler output”(汇编程序输出)的缩写形式!

UNIX中的可执行文件也是以一种特殊的方式加上标签,这样系统就能确认它们的特殊属性。为重要的数据定义标签,用独特的数字唯一地标识该数据是一种普遍采用的编程技巧。
    超级块(superblock,UNIX文件系统中的基础数据结构)就是用下面这个神奇数字唯一标识的:
    #define FS_MAGIC 0x011954
    这个数字是Kirk McKusick的生日。Kirk是Berkeley fast文件系统的实现者,上面这个神奇数字仍然在source base中使用(位于文件sys/fs/ufs_fs.h)。

在a.out文件中也存在类似的神奇数字。在AT&T的UNIX System V发布之前,a.out文件被标识为神奇数字0407,偏移为零。0407是PDP-11一条无条件转移指令(相对于程序计数器)的二进制编码!如果在兼容模式下运行PDP-11或VAX,可以先执行文件的第一个字,然后这个神奇数字(位于那里)会带你跳过a.out文件,进入程序第一个真正的可执行指令。在SVr4中,可执行文件用文件的第一个字节来标注,文件以十六进制7F打头,紧跟在后面的第二至第四字节为“ELF”。

C专家编程 第6章 运动的诗章:运行时数据结构 6.1 a.out及其传说相关推荐

  1. C专家编程 第6章 运动的诗章:运行时数据结构 6.3 操作系统在a.out文件里干了些什么

    操作系统在a.out文件里干了些什么      为什么a.out要以段的形式组织.段可以方便地映射到链接器在运行时可以直接载入的对象中!载入器只是取文件中的每个段的映像,并直接将它们放入到内存中.从本 ...

  2. objective-c 编程总结(第六篇)运行时操作 - 方法交换

    objective-c 编程总结(第六篇)运行时操作 - 方法交换 后面主要介绍oc类的运行时行为.这里面包括运行时方法的更换,消息的转发,以及动态属性.这些对于面向方面编程AOP的热爱者还是很有用的 ...

  3. 《C专家编程》第二章——这不是Bug,而是语言特性

    无论一门语言有多么流行或多么优秀,它总是存在一些问题,C语言也不例外.本章讨论的重点是C语言本身存在的问题,作者煞费苦心的用一个太空任务和软件的故事开头,也用另一个太空任务和软件的故事结尾,引人入胜. ...

  4. C专家编程 第10章 再论指针 10.7 使用指针创建和使用动态数组

    使用指针创建和使用动态数组     当预先并不知道数据的长度时,可以使用动态数组.绝大多数具有数组的编程语言都能够在运行时设置数组的长度.它们允许程序员计算需要处理的元素的数目,然后创建一个刚好能容纳 ...

  5. C专家编程--读书笔记六 运行时数据结构

    第六章 一.知识点 1.代码和数据的区别也可以认为是编译时和运行时的分界线.编译器的绝大部分工作都跟翻译代码有关:必要的数据存储管理的绝大部分都在运行时进行.(P121) 2."a.out& ...

  6. C专家编程 第11章 你懂得C,所以C++不再话下 11.1 初识OOP

    C++之于C,就像Algol-68之于Algol          ---David L.Jones     如果你觉得C++还不够复杂,那你知道protected abstract virtual ...

  7. C专家编程 第1章 C:穿越时空的迷雾 1.4 KR C

    时间:1978 人物:Steve Johnson 事件:编写了pcc这个可移植的C编译器 影响:形成了一代C编译器的基础. C语言的演化之路如图1-2所示. 1973-3(早期的C)--->19 ...

  8. C专家编程 第8章 为什么程序员无法分清万圣节和圣诞节 8.2 根据位模式构筑图形

    根据位模式构筑图形     图标(icon)或者图形(glyph)是一种小型的位模式映射于屏幕后产生的图像.一个位表示图像上的一个像素.如果一个位被设置,那么它所代表的像素就是"亮" ...

  9. 《C专家编程》1-2章阅读收获

    一. C诡异离奇,缺陷重重,却获得了巨大的成功. ·编译器设计:效率(几乎)就是一切.编译器的效率包括两个方面:运行效率(代码的运行速度)和编译效率(产生可执行代码的速度). 除了开发和学习环境外,运 ...

最新文章

  1. R语言决策树、bagging、随机森林模型在训练集以及测试集的预测结果(accuray、F1、偏差Deviance)对比分析、计算训练集和测试集的预测结果的差值来分析模型的过拟合(overfit)情况
  2. oracle入门学习(3) 所用的学习环境介绍与设置
  3. WPF游戏,使用move游戏开发
  4. Wordpress 模版技术手册 - WordPress Theme Technical manuals
  5. 小码农也有大梦想!最小公倍数java算法
  6. PHRefreshTriggerView
  7. vs中四点画矩形的算法_实战基于图割算法的木材表面缺陷图像分析
  8. 【Axure交互教程】 滑动拼图验证登录效果
  9. cad延伸命令怎么用_原来我们都用错了CAD直线命令,你不能忽视的CAD直线绘制技巧详解...
  10. 利用input[type=range]制作一个简易的音乐播放器
  11. 中国金融市场目前存在的金融牌照总结
  12. 【Excle数据透视表】如何移动数据透视表的位置
  13. Swing交通罚单管理系统java车辆违章缴费金额查询交警信息jsp源代码Maven数据库mysql
  14. 注册IMDB的API KEY
  15. 推荐系统 之 AFM和DIN
  16. 传输层协议TCP和UDP的区别详解
  17. c语言中优先级劣后级,详解基金中优先级和劣后级的区别
  18. opencv学习记录——(5)图像像素的操作
  19. SSL证书快速部署到服务器WebServer
  20. HTML页面如何判断是手机访问还是电脑访问

热门文章

  1. 黄陈晨,你可以陪着我么
  2. 线程同步,互斥 事件 和关键代码的比较
  3. 2022-2028年中国嵌入式计算机系统行业发展现状调查及前景战略分析报告
  4. NLP在线医生(一)
  5. Python实现按键精灵功能
  6. Flutter 深入探索混合开发的技术演进
  7. 互联网人养娃 真就和别人不一样
  8. 小鸟云管理终端(VNC连接)常见问题
  9. GB/T35590-2017移动电源CMA检测报告,移动电源新国标检测
  10. 4G低功耗LTE无线通信模块