深入理解计算机系统(第3版) 第三章 程序的机器级表示(2)

1.过程

过程是软件中一种很重要的抽象。它提供了一种封装代码的方式,用一组指定的参数和一个可选的返回值实现了某种功能。然后,可以在程序中的不同地方调用这个函数。

不同编程语言中,过程的形式多样:函数、方法、子例程、处理函数等。

假设过程P调用过程Q,Q执行后返回到P,这些动作包括下面一个或多个机制:

-->传递控制:在进入过程Q的时候,程序计数器必须被设置为Q的代码的起始地址,然后在返回时,要把程序计数器设置为P中调用Q后面那条指令的地址。

-->传递数据:P必须能够向Q提供一个或多个参数,Q必须能够向P返回一个值。

-->分配和释放内存:在开始时,Q可能需要为局部变量分配空间,而在返回前,又必须释放这些存储空间。

 

2.指针运算

C语言允许对指针进行运算,而计算出来的值会根据该指针引用的数据类型的大小进行伸缩。也就是说,如果P是一个指向类型为T的数据的指针,P的值为x,那么表达式P+i的值为x+L*i,这里的L是数据类型T的大小。

 

3.异制的数据结构

C语言提供了两种将不同类型的对象组合到一起创建数据类型的机制:结构(structure,将多个对象集合到一个单位中)、联合(union,允许用几种不同的类型来引用一个对象)

-->结构:C语言的struct声明创建一个数据类型,将可能不同类型的对象聚合到一个对象中。用名字来引用结构的各个组成部分。类似数组的实现,结构的所有组成部分都存放在内存中一段连续的区域内,而指向结构的指针就是结构第一个字节的地址。编译器维护关于每个结构类型的信息,指示每个字段的字节偏移。它以这些偏移作为内存引用指令中的位移,从而产生对结构元素的引用。

-->联合:联合提供了一种方式,能够规避C语言的类型系统,允许以多种类型来引用一个对象。联合声明的语法与结构的语法一样,只不过语义相差比较大。它们是用不同的字段来引用相同的内存块。

 

4.理解指针

指针是C语言的一个核心特色。它们以一种统一的方式,对不同数据结构中的元素产生引用。

-->每个指针都对应一个类型:这个类型表明该指针指向的是哪一类对象。

-->每个指针都有一个值:这个值是每个指定类型的对象的地址。特殊的NULL(0)值表示该指针没有指向任何地方。

-->指针用&运算符创建。

-->数组与指针紧密联系。

-->将指针从一种类型强制转换成另一种类型,只改变它的类型,而不改变它的值。

-->指针也可以指向函数。

 

第三章小结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值