@@ -11,15 +11,15 @@ platform-specific behavior. In particular, on x86 `u64` and `f64` may be only
11
11
aligned to 32 bits.
12
12
-->
13
13
14
- 最初に重要なことは 、すべての型はバイト単位で指定されたアラインメントに従います。
14
+ 最初に重要なこととして 、すべての型はバイト単位で指定されたアラインメントに従います。
15
15
ある型のアラインメントは、値を格納する有効なアドレスを規定します。
16
16
アラインメント ` n ` の値は、` n ` の倍数のアドレスにのみ格納できます。
17
17
つまりアラインメント 2 は、偶数アドレスにのみ格納できることを意味し、
18
18
アラインメント 1 はどこにでも格納できることになります。
19
19
アラインメントの最小値は 1 で、常に 2 のべき乗になります。
20
20
ほとんどのプリミティブ型はそのサイズにアラインメントされますが、
21
21
これはプラットフォーム依存の挙動です。
22
- 特に x86 では ` u64 ` と ` f64 ` は 32 bits にアラインされるかもしれません 。
22
+ 特に x86 では ` u64 ` と ` f64 ` は 32ビットにアラインされるかもしれません 。
23
23
24
24
<!--
25
25
A type's size must always be a multiple of its alignment. This ensures that an
@@ -84,7 +84,7 @@ of 32-bits. It will potentially become:
84
84
-->
85
85
86
86
この構造体は、メンバーのプリミティブ型が対応するサイズにアラインされるアーキテクチャでは、
87
- 32-bit にアラインされます 。そのため全体の構造体のサイズも 32 bit の倍数になります 。
87
+ 32ビットにアラインされます 。そのため全体の構造体のサイズも 32ビットの倍数になります 。
88
88
このようになるでしょう。
89
89
90
90
``` rust
@@ -93,7 +93,7 @@ struct A {
93
93
_pad1 : [u8 ; 3 ], // `b` のアラインメントのため
94
94
b : u32 ,
95
95
c : u16 ,
96
- _pad2 : [u8 ; 2 ], // 全体のサイズを 4 byte の倍数にするため
96
+ _pad2 : [u8 ; 2 ], // 全体のサイズを 4バイトの倍数にするため
97
97
}
98
98
```
99
99
@@ -137,7 +137,7 @@ features of Rust make it desirable for the language to play with data layout in
137
137
complex ways.
138
138
-->
139
139
140
- この A, B の例では、レイアウトのが保証されないなんて融通が利かないと思うかもしれませんが 、
140
+ この A, B の例では、レイアウトが保証されないなんて融通が利かないと思うかもしれませんが 、
141
141
他の機能を考えると、Rust がデータレイアウトを複雑にいじくれるようにするのは好ましいのです。
142
142
143
143
<!--
@@ -242,8 +242,8 @@ size_of::<&T>()`.
242
242
-->
243
243
244
244
ところが、このような表現が非効率な場合もあります。
245
- わかりやすい例としては、Rust の "null ポインタ最適化 " があります。
246
- これは、ある enum がデータを持たないメンバー(たとえば ` None ` )と、(ネストしてるかもしれない)null を取らないメンバー (たとえば ` &T ` )から構成される場合、null ポインタをデータを持たないメンバーと解釈することができるので 、タグが不要になります。
245
+ わかりやすい例としては、Rust の "ヌルポインタ最適化 " があります。
246
+ これは、ある enum がデータを持たないメンバー(たとえば ` None ` )と、(ネストしてるかもしれない)ヌルを取らないメンバー (たとえば ` &T ` )から構成される場合、ヌルポインタをデータを持たないメンバーと解釈することができるので 、タグが不要になります。
247
247
その結果、たとえば ` size_of::<Optiona<&T>>() == size_of::<&T>() ` となります。
248
248
249
249
<!--
@@ -256,12 +256,12 @@ special constrained representations. As such it is *especially* desirable that
256
256
we leave enum layout unspecified today.
257
257
-->
258
258
259
- Rust には、null ポインタになりえない型や、null ポインタを含まない型がたくさんあります 。
259
+ Rust には、ヌルポインタになりえない型や、ヌルポインタを含まない型がたくさんあります 。
260
260
例えば ` Box<T> ` , ` Vec<T> ` , ` String ` , ` &T ` , ` &mut T ` などです。
261
261
同様に、ネストした複数の enum が、タグを単一の判別子に押し込めることも考えられます。
262
262
タグが取り得る値は、定義により限られているからです。
263
263
原理的には、enum はとても複雑なアルゴリズムを使って、ネストした型を特別な制約のもとで表現し、
264
- bit を隠すことができるでしょう 。
264
+ ビットを隠すことができるでしょう 。
265
265
このため、enum のレイアウトを規定しないでおくことは、現状では * 特に* 好ましいのです。
266
266
267
267
0 commit comments