「C++の基礎 - 構造体」の版間の差分

ナビゲーションに移動 検索に移動
81行目: 81行目:
<br><br>
<br><br>


== 構造体のアライメント ==
== メモリアライメント ==
==== メモリアライメントとは ====
構造体のメモリレイアウトは、コンパイラによりパディングが挿入される場合がある。<br>
これは、メモリアクセスの効率化のためである。<br>
<br>
以下の例では、パディングのため、実際の構造体のサイズは12[バイト]になる可能性がある。<br>
ただし、<code>#pragma pack</code>ディレクティブを使用して、アラインメントを制御することができる。<br>
<br>
<syntaxhighlight lang="c++">
struct AlignmentExample {
    char c;    // 1 バイト
    int i;      // 4 バイト
    short s;    // 2 バイト
};
</syntaxhighlight>
<br>
==== メモリアライメントの制御 ====
以下に示す方法により、構造体のアライメントを制御することができる。<br>
以下に示す方法により、構造体のアライメントを制御することができる。<br>
<br>
<br>
95行目: 111行目:
アライメントの変更が必要かどうかを検討して、可能な限り標準的なアライメントを使用することを推奨する。<br>
アライメントの変更が必要かどうかを検討して、可能な限り標準的なアライメントを使用することを推奨する。<br>
<br>
<br>
==== GNU C/C++の属性を使用する方法 ====
===== GNU C/C++の属性を使用する方法 =====
GCC / Clangで動作する。<br>
GCC / Clangで動作する。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
103行目: 119行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== プラグマを使用する方法 ====
===== プラグマを使用する方法 =====
GCC / Clangで動作する。<br>
GCC / Clangで動作する。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
115行目: 131行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== Clang特有の属性を使用する方法 ====
===== Clang特有の属性を使用する方法 =====
Clangのみ動作する。<br>
Clangのみ動作する。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
123行目: 139行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== C++11以降の標準属性を使用する方法 ====
===== C++11以降の標準属性を使用する方法 =====
GCC / Clangで動作する。<br>
GCC / Clangで動作する。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">

案内メニュー