12.07.2015 Views

RealView 编译工具编译器参考指南 - ARM Information Center

RealView 编译工具编译器参考指南 - ARM Information Center

RealView 编译工具编译器参考指南 - ARM Information Center

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C 和 C++ 实 现 细 节struct X{int x:10;int y:20;int z:5;};编 译 器 填 充 第 一 个 容 器 的 剩 余 两 位 , 并 为 z 分 配 一 个 新 的 整 数 容 器 。位 域 容 器 可 以 相 互 重 叠 , 例 如 :struct X{int x:10;char y:2;};第 一 个 声 明 创 建 一 个 整 数 容 器 , 并 为 x 分 配 10 位 。 这 10 位 占 用 该 整 数 容 器 的 第1 个 字 节 以 及 第 2 个 字 节 的 两 位 。 在 第 二 个 声 明 中 , 编 译 器 检 查 char 类 型 的 容器 。 由 于 没 有 适 合 的 容 器 , 因 此 , 编 译 器 分 配 一 个 正 确 对 齐 的 新 char 容 器 。由 于 char 的 自 然 对 齐 边 界 为 1, 因 此 , 编 译 器 搜 索 包 含 足 够 未 分 配 位 数 的 第 一个 字 节 , 以 便 完 全 包 含 该 位 域 。 在 示 例 结 构 中 , int 容 器 的 第 二 个 字 节 为 x 分 配了 两 位 , 有 六 位 没 有 分 配 。 编 译 器 分 配 一 个 char 容 器 ( 从 前 一 个 int 容 器 的 第二 个 字 节 开 始 ), 跳 过 分 配 给 x 的 前 两 位 , 然 后 为 y 分 配 两 位 。如 果 将 y 声 明 为 char y:8, 则 编 译 器 填 充 第 二 个 字 节 , 然 后 为 第 三 个 字 节 分 配 一个 新 的 char 容 器 , 因 为 位 域 不 能 溢 出 其 容 器 。 图 5-2 显 示 了 以 下 示 例 结 构 的 位域 分 配 情 况 :struct X{int x:10;char y:8;};Bit number31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0unallocatedypaddingx图 5-2 位 域 分 配 1注 意相 同 的 基 本 规 则 适 用 于 具 有 不 同 容 器 类 型 的 位 域 声 明 。 例 如 , 要 为 示 例 结 构 添加 int 位 域 , 请 使 用 以 下 代 码 :<strong>ARM</strong> DUI 0348BC Copyright © 2007-2009 <strong>ARM</strong> Limited. All rights reserved. 5-11ID090708Non-Confidential, Unrestricted Access

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!