• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:bool と BOOL の違い(構造体))

boolとBOOLの違い(構造体)とは?

このQ&Aのポイント
  • C++プログラマーが恥ずかしい質問ですが、Borland C++ Builder 9でアプリ開発中にboolとBOOLが混在していることに気付きました。
  • その中にはsizeof()でサイズを計算してみたところ、TEST_Aは46バイト、TEST_Bは52バイトという結果が出ています。
  • BOOLは4バイトと思っていたので、TEST_Bがなぜ52バイトになるのかわかりません。質問にお答えいただける方がいらっしゃいましたら、教えていただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.1

構造体のサイズは、メンバのサイズの和では無いからです。 Google等でキーワード「構造体のサイズ」で検索をかけると、 答えが見つかるはずです。

hiroki_vv
質問者

お礼

早速の回答ありがとうございました。 キーワードで検索して納得しました。

その他の回答 (2)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.3

C/C++の基本ですね。 構造体やクラスなどはコンパイラによって、 パディング処理が行われ、 バイトアライメントが起こります。 回避方法は環境によって異なります。

hiroki_vv
質問者

お礼

早速の回答ありがとうございました。 納得しました。

  • arain
  • ベストアンサー率27% (292/1049)
回答No.2

それは、同じソース上にありますか? また、コンパイルオプションなども一緒ですか? サイズからすると、メモリセグメンテーションによるもののようですが。 単純に書くと、「メモリ管理上キリのいい単位でアクセスできる場所ににメモリ確保していくため、構造体要素の合計サイズにならない」ということです。 とりあえず、「bool」と「BOOL」をsizeof()でサイズをチェックしてください。 bool=1、BOOL=4or1になると思います。 セグメンテーションが「4」であれば、 flagは先頭から1番地目に取られますが、ch[]は1番地目ではなく、キリのいい4番地目から確保されます。 このとき、確保されるサイズも45ではなく、キリのいい48で確保されます。 そのため「4+48=52」となります。

hiroki_vv
質問者

お礼

早速の回答ありがとうございました。 納得しました。