teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コード追加

2020/06/08 13:35

投稿

退会済みユーザー
answer CHANGED
@@ -1,6 +1,18 @@
1
1
  構造体は指定しないと1バイト単位できっちり詰まりません。
2
2
  > uint8_t b
3
3
 
4
- の部分は、1バイト+パティング3バイトになりそうな気がします。4バイト単位(処理系にもよりますが)のメモリ境界に配置しないとアクセス効率が落ちるため、コンパイラがパティングをします。
4
+ の部分は、1バイト+パティング3バイトになりそうな気がします。4バイト単位(処理系にもよりますが)のメモリ境界に配置しないとアクセス効率が落ちるため、コンパイラがパティングをします。1バイト単位で詰めるなら、こんな感じになると思います。
5
+
6
+ ```C++
7
+ #pragma pack(1) //packを1バイト単位にする
8
+ typedef struct
9
+ {
10
+ uint32_t a //Address offset: 0x00
11
+ uint8_t b //Address offset: 0x04
12
+ uint32_t c //Address offset: 0x05
13
+ }s_instance;
14
+ #pragma pack() //packを戻す
15
+ ```
16
+
5
17
  [pragma pack](https://docs.microsoft.com/ja-jp/cpp/preprocessor/pack?view=vs-2019)
6
18
  (Microsoftの機械翻訳怪しいので英語にして読んだほうがいいかも)

2

スペルミス修正

2020/06/08 13:35

投稿

退会済みユーザー
answer CHANGED
@@ -3,4 +3,4 @@
3
3
 
4
4
  の部分は、1バイト+パティング3バイトになりそうな気がします。4バイト単位(処理系にもよりますが)のメモリ境界に配置しないとアクセス効率が落ちるため、コンパイラがパティングをします。
5
5
  [pragma pack](https://docs.microsoft.com/ja-jp/cpp/preprocessor/pack?view=vs-2019)
6
- Micorosoftの機械翻訳怪しいので英語にして読んだほうがいいかも)
6
+ Microsoftの機械翻訳怪しいので英語にして読んだほうがいいかも)

1

追記

2020/06/08 13:24

投稿

退会済みユーザー
answer CHANGED
@@ -2,4 +2,5 @@
2
2
  > uint8_t b
3
3
 
4
4
  の部分は、1バイト+パティング3バイトになりそうな気がします。4バイト単位(処理系にもよりますが)のメモリ境界に配置しないとアクセス効率が落ちるため、コンパイラがパティングをします。
5
- [pragma pack](https://docs.microsoft.com/ja-jp/cpp/preprocessor/pack?view=vs-2019)
5
+ [pragma pack](https://docs.microsoft.com/ja-jp/cpp/preprocessor/pack?view=vs-2019)
6
+ (Micorosoftの機械翻訳怪しいので英語にして読んだほうがいいかも)