10.07.2015 Views

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

使 用 MPLAB <strong>C30</strong> C 编 译 器表 3-9: 特 定 的 优 化 选 项 ( 续 )选 项-fstrict-aliasing定 义允 许 编 译 器 采 用 适 用 于 被 编 译 语 言 的 最 严 格 别 名 规 则 。 对 于C, 这 根 据 表 达 式 的 类 型 进 行 优 化 。 尤 其 是 , 假 定 一 种 类 型 的对 象 不 会 和 另 一 种 类 型 的 对 象 存 放 在 同 一 地 址 , 除 非 类 型 几 乎相 同 。 例 如 , unsigned int 可 引 用 int, 但 不 能 引 用void* 或 double。 字 符 类 型 可 引 用 任 何 其 他 类 型 。特 别 要 注 意 下 面 的 代 码 :union a_union {int i;double d;};-fthread-jumps-funroll-loops-funroll-all-loopsint f() {union a_union t;t.d = 3.0;return t.i;}不 读 最 后 写 入 的 联 合 成 员 , 而 读 其 他 联 合 成 员 ( 称 为“type-punning”) 比 较 常 见 。 即 使 对 于-fstrict-aliasing, 如 果 通 过 联 合 类 型 访 问 存 储 器 ,type-punning 也 是 允 许 的 。 因 此 上 面 的 代 码 可 得 到 期 望 的 结果 。 但 下 面 的 代 码 可 能 得 不 到 期 望 的 结 果 :int f() {a_union t;int* ip;t.d = 3.0;ip = &t.i;return *ip;}是 一 种 优 化 , 检 测 一 个 转 移 的 目 标 语 句 是 否 包 含 另 一 个 条 件 判断 。 如 果 是 这 样 , 第 一 个 转 移 改 变 为 指 向 第 二 个 转 移 的 目 标 语句 , 或 紧 随 其 后 的 语 句 , 这 取 决 于 条 件 是 真 还 是 假 。执 行 循 环 展 开 优 化 。 仅 对 在 编 译 时 或 运 行 时 其 迭 代 次 数 可 以 确定 的 循 环 进 行 这 种 优 化 。 -funroll-loops 隐 含 了-fstrength-reduce 和 -frerun-cse-after-loop。执 行 循 环 展 开 优 化 。 对 于 所 有 的 循 环 执 行 这 种 优 化 , 通 常 这 种优 化 会 使 程 序 运 行 较 慢 。-funroll-all-loops 隐 含 了 -fstrength-reduce 和-frerun-cse-after-loop。© 2005 Microchip Technology Inc. DS51284C_CN 第 45 页

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

Saved successfully!

Ooh no, something went wrong!