タグ

アラインメントに関するyowanoのブックマーク (2)

  • 未初期化な領域とアラインメント - Cry's Blog

    http://d.hatena.ne.jp/Cryolite/20051021#p1 の問題に対する解答. まず大前提として,未初期化な領域に配置構文 new を用いてオブジェクトを構築する手法は潜在的な危険が多く,当にそれが必要な場合以外は用いないという方針が基であることを確認しておいてください. まず最初に自動変数として(スタック上に)確保した char の配列に任意のオブジェクトを構築する場合についてです. class MyClass { ..... }; int main() { char buf[sizeof(MyClass)]; MyClass *p = static_cast<MyClass *>(static_cast<void *>(buf)); ::new (p) MyClass(); ..... // #1 p->~MyClass(); }上のコードはアラインメン

    未初期化な領域とアラインメント - Cry's Blog
    yowano
    yowano 2013/11/15
    『char の配列を確保する new が返すアドレスは,その配列のサイズ以下のあらゆる型のオブジェクトが安全に構築できるアドレスであることが規格上要求されている』など、知りづらい有益な情報アリ。
  • データ型のアラインメントとは何か,なぜ必要なのか?

    以前このサイトとブログに,何度かアラインメントに関する記事を書きました (サイト内関連ページ参照). そのせいか「アラインメント」で検索して来てくれる人が多いので, 過去の記事に加筆修正してこのページを新たに作成しました. 加筆した点は次のとおりです. アラインメントとメモリアクセス回数の関係をわかりやすくするため, (ほんの少し) 図を導入しました. 「データがアラインされていないとメモリアクセス回数が増える」 と言葉で説明しているサイトは多いのですが, 図で示しているところはまだ見たことありません. アラインされていないアドレスにデータを書き込む場合, 読み出しの場合以上にメモリアクセス回数がかかる可能性があることを追記しました. 以前は「複合データ型 (配列,構造体,共用体) のアラインメント」はほとんど自明のことだと思っていたので軽く流していましたが, 意外なことにこれを解説してい

    yowano
    yowano 2013/09/10
    プログラミング言語(というよりハードウェア)におけるアラインメントの意味から、その存在理由、注意点まで、詳細丁寧な解説。
  • 1