深入理解计算机系统 3.9~3.10

C语言的结构体和联合(union)可以把一些不同类型的字段封装成一个整体,使用语法也基本相同。区别在于union是所有字段共享一块内存空间,对不同字段的调用是对内存块的值做不同类型的解释。

struct的字段要遵守对齐法则,规则是字段的起始地址必须是字段类型长度的倍数。struct本身的起始地址必须是最大字段类型长度的倍数。

union所有字段起始地址都是union本身的地址,union的长度是最大字段的长度。

对齐指令是.align n。

指针的值表示地址,0表示空。

对指针做强制类型转换,指针的值不变。

函数指针的值是函数第一条指令的地址。

c语言没有防止溢出的保障,栈结构容易遭到破坏。针对这一点,有栈随机化(为栈帧添加随机长度的空白区域),金丝雀值(随机生成一些值用来检测栈是否被破坏)等方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值