Chinaunix首页 | 论坛 | 博客
  • 博客访问: 530763
  • 博文数量: 118
  • 博客积分: 3995
  • 博客等级: 中校
  • 技术积分: 1276
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-15 12:15
文章分类

全部博文(118)

文章存档

2014年(1)

2013年(1)

2010年(6)

2009年(27)

2008年(10)

2007年(33)

2006年(38)

2005年(2)

我的朋友

分类: LINUX

2009-03-21 16:46:27

inc/mmu.h最后有段代码

struct Pseudodesc {
  uint16_t pd_lim; // Limit
  uint32_t pd_base; // Base address
} __attribute__ ((packed));

里面 __attribute__ ((packed)) 表示里面的元素紧凑排列,中间不要有间隙;这点跟对齐正好相反 __attribute__ ((aligned(n))),n为4、8等2的幂数。

注意:packed,aligned(n)两边的双括号是必须的。

使用packed编译参数,防止编译器对该结构进行优化,即把pd_base进行32位对齐,使pd_lim和pd_base中间产生2字节的空隙;这样pd_lim)(低16位)后面紧跟着pd_base(高32位),形成48位,被加载到GDTR或者LDTR或者IDTR

info gcc里面的部分解释

The `packed' attribute specifies that a variable or structure field should have the smallest possible alignment--one byte for a variable, and one bit for a field, unless you specify a larger value with the `aligned' attribute.

阅读(1270) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~