当前位置:网站首页>C专家编程 第1章 C:穿越时空的迷雾 1.1 C语言的史前阶段
C专家编程 第1章 C:穿越时空的迷雾 1.1 C语言的史前阶段
2022-08-01 21:00:00 【weixin_客子光阴】
C语言的产生竟然源于一个失败的项目---Multics工程。该项目试图建立一个非常巨大的操作系统,能够应用于规模很小的硬件系统中。Multics成了总结工程教训的宝库,但它同时也为C语言体现“小即是美”铺平了道路。
Ken Thompson Dennis Ritchie
Thompson PDP-7 新型的操作系统(汇编语言)
Brian Kernighan 1970 命名为UNXI(1970.1.1)
Thompson 创建了B语言,他把用于研究的语言BCPL做了简化,使B的解释器能常驻于PDP-7只有8KB大小的内存中。因为硬件系统的内存限制,它只允许放置解释器,而不是编译器,由此产生的低效阻碍了使用B语言进行UNIX自身的系统编程。
1965-7(BCPL)---》1969(B)---》1971(New B)---》1972-3(早期的C)
语言
UNIX(用PDP-7汇编语言编写)---》UNIX(用PDP-11汇编语言编写)---》UNIX(用C编写)
操作系统
PDP-7 PDP-11
IBM 360
Honeywell 635
确切地说,UNIX比C语言出现得早(这也是为什么UNIX的系统时间是从1970年1月1日起按秒计算的,因为它就是那时候产生的。
编译器设计者的金科玉律:效率(几乎)就是一切
需要关心的东西: 有意义的错误信息;良好的文档;产品支持
编译器效率包括:运行效率(代码的运行速度)和编译效率(产生可执行代码的速度)。除了一些开发和学习环境之外,运行效率起决定性作用。
有很多编译器优化措施会延长编译时间,但能缩短运行时间。还有一些优化措施(如清除无用代码和忽略运行时检查等)技能缩短编译时间,又能减少运行时间,同时还能减少内存的使用量。这些优化措施的不利之处在于可能无法发现程序中无效的运行结果。
Dennis Ritchie发明了注重效率的“New B”却获得了成功。
B语言发扬了“引用数组元素相当于对指针加上偏移量的引用”这个想法。B语言同时保持了BCPL语言无类型的特点,它仅有的操作数就是机器的字。Thomposon 发明了++和--操作符,并把它加入到PDP-7的B编译器中。它们在C语言中依然存在。
//C语言中,拷贝字符串的一个字符的语句:
*p++ = *s++;
可以极其有效地被编译为PDP-11代码:
moveb (r0)+, (r1)+
Thompson PDP-11 (汇编语言)
PDP-11以后,无类型语言很快就显得不合时宜了。这种处理器以硬件支持几种不同长度的数据类型为特色,而B语言无法表达不同的数据类型。
"New B"->C 采用编译模式 引入类型系统,并且使用每个变量在使用前必须先声明。
边栏推荐
- MySQL 中出现的字符编码错误 Incorrect string value: ‘\x\x\x\x‘ for column ‘x‘
- Interview Blitz 70: What are sticky packs and half packs?How to deal with it?
- Godaddy domain name resolution is slow and how to use DNSPod resolution to solve it
- Pytorch框架学习记录9——非线性激活
- LinkedList源码分享
- SkiaSharp 之 WPF 自绘 五环弹动球(案例版)
- StringTable Detailed String Pool Performance Tuning String Concatenation
- Goroutine Leaks - The Forgotten Sender
- [Personal Work] Remember - Serial Logging Tool
- Little data on how to learn?Jida latest small learning data review, 26 PDF page covers the 269 - page document small data learning theory, method and application are expounded
猜你喜欢

【Kaggle】House Prices

OSG笔记:设置DO_NOT_COMPUTE_NEAR_FAR,手动计算远近平面

LTE time domain and frequency domain resources

函数(二)

4.1 配置Mysql与注册登录模块

MySQL语法基础

vant实现Select效果--单选和多选
![[Multi-task optimization] DWA, DTP, Gradnorm (CVPR 2019, ECCV 2018, ICML 2018)](/img/a1/ec038eeb6c98c871eb31d92569533d.png)
[Multi-task optimization] DWA, DTP, Gradnorm (CVPR 2019, ECCV 2018, ICML 2018)

New graduate students, great experience in reading English literature, worthy of your collection

算法---解码方法(Kotlin)
随机推荐
响应式织梦模板美容整形类网站
[Energy Conservation Institute] Comparative analysis of smart small busbar and column head cabinet solutions in data room
[Multi-task learning] Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts KDD18
技术栈概览
Digital twin Beijing the imperial palace, yuan universe is the process of tourism
Nacos 配置中心
Go Atomic
Pytorch框架学习记录12——完整的模型训练套路
LeetCode每日一题(1807. Evaluate the Bracket Pairs of a String)
算法---解码方法(Kotlin)
【Social Media Marketing】How to know if your WhatsApp is blocked?
密码学的基础:X.690和对应的BER CER DER编码
[Energy Conservation Institute] Ankerui Food and Beverage Fume Monitoring Cloud Platform Helps Fight Air Pollution
tiup mirror clone
kubernetes各名词缩写
R语言 pca主成分分析的主要方法
tiup mirror
【Dart】dart之mixin探究
徒步,治好了我的精神内耗
SkiaSharp 之 WPF 自绘 五环弹动球(案例版)