12.07.2015 Views

RealView Compilation Tools コンパイラユーザガイド - ARM ...

RealView Compilation Tools コンパイラユーザガイド - ARM ...

RealView Compilation Tools コンパイラユーザガイド - ARM ...

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

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

コーディング 慣 行struct mystruct{char c;__packed short s; // recommended}こ れは、 構 造 体 をパ ッ クする 際 に 推 奨 さ れる 方 法 です。 「パ ッ ク 構 造 体と 個 別 パックフィールド」 (ページ 5-33) を 参 照 して 下 さい。注同 じ 原 則 が 共 用 体 に も 当 てはま り ます。 共 用 体 全 体 を __packed と し て 宣 言 するか、 __packed 属 性 を 使 用 する と 、 メ モ リ 内 で 境 界 整 列 さ れていない 共 用 体 の 要素 を 識 別 できます。__packed で 修 飾 さ れた 構 造 体 の 読 み 出 し と 書 き 込 みを 行 う には、 非 境 界 整 列型 ア ク セスが 必 要 であ る ため、 パフ ォーマン スが 低 下 する 可 能 性 があ り ます。詳 細 については、 「パ ッ ク 構 造 体 と 個 別 パ ッ ク フ ィ ール ド 」 (ページ 5-33) を参 照 し て 下 さ い。非 境 界 整 列 型 ポイ ン タデフォル ト で、 <strong>ARM</strong> コンパイラは、 境 界 整 列 されたメモリ 内 のワードへの Cポインタを 期 待 し ます。 この 方 がコンパイ ラは 効 率 的 なコード を 生 成 でき るためです。任 意 のア ド レ スにあ る ワー ド を 参 照 で き る ポ イ ン タ を 定 義 する には、 ポ イ ンタを 定 義 するときに、__packed 修 飾 子 を 使 用 し て こ の こ と を 指 定 する 必 要 があります。 以 下 に 例 を 示 し ます。__packed int *pi; // pointer to unaligned intポインタが __packed と し て 宣 言 さ れてい る 場 合 、 <strong>ARM</strong> コンパイラは、 ポインタ の 境 界 整 列 にかかわ らず、 その 被 参 照 値 に 正 し く ア ク セスする ための コードを 生 成 します。 生 成 さ れた コー ド は、 一 連 のバイ ト ア ク セスで 構 成 さ れるか、 単 純 な LDR 命 令 ではな く 変 数 の 境 界 整 列 に 依 存 する シフ ト 命 令 と マス ク命 令 で 構 成 さ れます。 その 結 果 、 ポインタを __packed と し て 宣 言 する と 、 パフ ォーマン スが 低 下 するだけでな く 、 コー ド サ イ ズ も 増 大 し ます。5-32 Copyright © 2002-2010 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0205IJNon-Confidential, ID 100419

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

Saved successfully!

Ooh no, something went wrong!