编译研究7——数据类型、边界对齐和可变长运行时堆栈

1、 当前编译器支持若干种数据类型,分别是:
      名称                     长度(字节)        位长
  short_int                         1                           8
       int                               2                          16
   long_int                         4                          32
      char                            1                            8
      float                            2                          16
    long_float                     4                          32
2、虚拟机的存储器(闪存、寄存器、永久存储)的最小分配单元是1字节,在对齐时会采取截断/增补方式。例如:
short_int si=0 ;
int ii = si ;
$ 上述代码在运行时会发生增补,即ii = si 中的si会由原来的8位扩张为16位,其高8位全部置0,以适应ii。
long_int li = 1 ;
int ii = li ;
-$
 此时,li由于位长有32位比ii多出16位,为适应右操作数会被截断,即在表达式 ii=li 中转换为int型。
$-
3、基于2中所述最小分配单元,进程的运行时堆栈被设计为元素可变长度,即压栈/出栈元素长度可以是8/16/32中的任意位长,长度区别只需在指令处指定:
psh <2>  [psb + 4]
pop <2> reg0
psb为堆栈的基址寄存器,普通寄存器reg0长度32位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值