@@ -11,15 +11,15 @@ platform-specific behavior. In particular, on x86 `u64` and `f64` may be only
1111aligned to 32 bits.
1212-->
1313
14- 最初に重要なことは 、すべての型はバイト単位で指定されたアラインメントに従います。
14+ 最初に重要なこととして 、すべての型はバイト単位で指定されたアラインメントに従います。
1515ある型のアラインメントは、値を格納する有効なアドレスを規定します。
1616アラインメント ` n ` の値は、` n ` の倍数のアドレスにのみ格納できます。
1717つまりアラインメント 2 は、偶数アドレスにのみ格納できることを意味し、
1818アラインメント 1 はどこにでも格納できることになります。
1919アラインメントの最小値は 1 で、常に 2 のべき乗になります。
2020ほとんどのプリミティブ型はそのサイズにアラインメントされますが、
2121これはプラットフォーム依存の挙動です。
22- 特に x86 では ` u64 ` と ` f64 ` は 32 bits にアラインされるかもしれません 。
22+ 特に x86 では ` u64 ` と ` f64 ` は 32ビットにアラインされるかもしれません 。
2323
2424<!--
2525A 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:
8484-->
8585
8686この構造体は、メンバーのプリミティブ型が対応するサイズにアラインされるアーキテクチャでは、
87- 32-bit にアラインされます 。そのため全体の構造体のサイズも 32 bit の倍数になります 。
87+ 32ビットにアラインされます 。そのため全体の構造体のサイズも 32ビットの倍数になります 。
8888このようになるでしょう。
8989
9090``` rust
@@ -93,7 +93,7 @@ struct A {
9393 _pad1 : [u8 ; 3 ], // `b` のアラインメントのため
9494 b : u32 ,
9595 c : u16 ,
96- _pad2 : [u8 ; 2 ], // 全体のサイズを 4 byte の倍数にするため
96+ _pad2 : [u8 ; 2 ], // 全体のサイズを 4バイトの倍数にするため
9797}
9898```
9999
@@ -137,7 +137,7 @@ features of Rust make it desirable for the language to play with data layout in
137137complex ways.
138138-->
139139
140- この A, B の例では、レイアウトのが保証されないなんて融通が利かないと思うかもしれませんが 、
140+ この A, B の例では、レイアウトが保証されないなんて融通が利かないと思うかもしれませんが 、
141141他の機能を考えると、Rust がデータレイアウトを複雑にいじくれるようにするのは好ましいのです。
142142
143143<!--
@@ -242,8 +242,8 @@ size_of::<&T>()`.
242242-->
243243
244244ところが、このような表現が非効率な場合もあります。
245- わかりやすい例としては、Rust の "null ポインタ最適化 " があります。
246- これは、ある enum がデータを持たないメンバー(たとえば ` None ` )と、(ネストしてるかもしれない)null を取らないメンバー (たとえば ` &T ` )から構成される場合、null ポインタをデータを持たないメンバーと解釈することができるので 、タグが不要になります。
245+ わかりやすい例としては、Rust の "ヌルポインタ最適化 " があります。
246+ これは、ある enum がデータを持たないメンバー(たとえば ` None ` )と、(ネストしてるかもしれない)ヌルを取らないメンバー (たとえば ` &T ` )から構成される場合、ヌルポインタをデータを持たないメンバーと解釈することができるので 、タグが不要になります。
247247その結果、たとえば ` size_of::<Optiona<&T>>() == size_of::<&T>() ` となります。
248248
249249<!--
@@ -256,12 +256,12 @@ special constrained representations. As such it is *especially* desirable that
256256we leave enum layout unspecified today.
257257-->
258258
259- Rust には、null ポインタになりえない型や、null ポインタを含まない型がたくさんあります 。
259+ Rust には、ヌルポインタになりえない型や、ヌルポインタを含まない型がたくさんあります 。
260260例えば ` Box<T> ` , ` Vec<T> ` , ` String ` , ` &T ` , ` &mut T ` などです。
261261同様に、ネストした複数の enum が、タグを単一の判別子に押し込めることも考えられます。
262262タグが取り得る値は、定義により限られているからです。
263263原理的には、enum はとても複雑なアルゴリズムを使って、ネストした型を特別な制約のもとで表現し、
264- bit を隠すことができるでしょう 。
264+ ビットを隠すことができるでしょう 。
265265このため、enum のレイアウトを規定しないでおくことは、現状では * 特に* 好ましいのです。
266266
267267
0 commit comments