タグ

構造体に関するyowanoのブックマーク (4)

  • ボックス化 - Wikipedia

    ボックス化(boxing)[1]とは、プログラミング言語において値型をオブジェクト型(参照型)に変換すること。逆に、ボックス化されたオブジェクトを値型に戻すことをボックス化解除(unboxing)[2]と呼ぶ。 概要[編集] Javaや.NET Frameworkなどの環境においては、値型(Javaではプリミティブ型[3]がこれに相当する)と参照型という根的に異なる二種類の型が存在する。参照型のインスタンスはヒープ上の独立した領域に確保される。値型は文脈によって確保される場所は異なるものの、いずれにせよメモリ上に連続的に確保される(例えば、ローカル変数として宣言された場合はスタック上に確保され、参照型のメンバとして宣言された場合は参照型の一部として確保される)。 このように値型と参照型とは根的に性質の異なるものであるが、さまざまな理由により、値型を参照型に型変換して運用することが必要と

    yowano
    yowano 2014/03/08
    値型を参照型に変更すること。JavaやC#等で考えられる概念。ボックス化においては、ヒープ上に新しく領域を確保し、そこに値型のデータをコピーする操作が生じるため、単純な型変換よりコストが掛かる。
  • ロベールのC++教室 - 第14章 前へならえ -

    構造体のサイズを確認してみたことはありますか? 構造体をファイルに保存したことはありますか? やけにサイズが大きかったり、ゴミが保存されたりはしませんでしたか? 今回は、そういうことがなぜ起こるのかについてのお話です。 では、今回の要点です。 構造体のメンバはぎっちり詰まっていないことがある。 #pragma pack でアラインメントを変更できる。 メンバ変数の構造体の先頭からの位置は offsetof マクロで取得できる。 では、いってみましょう。 次のような構造体を考えてみましょう。 strcut SPerson { char szName[21]; // 名前 int nAge; // 年齢 char nBirthmonth; // 誕生月 char fSex; // 性別 }; さて、問題です。この構造体のサイズはいくらになるでしょうか? 先ず、szName のサイズは21バイト

    yowano
    yowano 2014/01/03
    メンバ変数の構造体の先頭からの位置は、stddef.h に定義された offsetof マクロで取得することができる。
  • データ型のアラインメントとは何か,なぜ必要なのか?

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

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

    構造体って? C 言語で、いくつかの変数をひとまとまりにしたものを構造体といいます。例えば、下のように struct を使って定義します。 typedef struct Item { int code; /* 商品コード */ int name; /* 商品名 */ int price; /* 価格 */ } ITEM, *LPITEM ; 商品コードと商品名と価格を管理する場合、code, name, price の変数をそれそれ作るよりも商品( Item) でひとまとめすることでプログラムがわかりやすくなります。こういったまとまったデータをレコードともいいます。プログラムが小さいと大げさなように感じされますが、複雑になるにまし、struct のありがたみがわかります。 では C++ の構造体はというと、同じように使えます。C++ はCのソースコードをそのままコンパイルできるようになって

    yowano
    yowano 2013/04/22
    C++における構造体とクラスは同一のもの。class キーワードを struct キーワードに置き換えている。構造体として宣言しても、メンバ関数を持つことはもちろん、継承すらもできる。ただしデフォルトのアクセス修飾子が違う
  • 1