about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2018-07-10 22:56:38 +0200
committerGitHub <noreply@github.com>2018-07-10 22:56:38 +0200
commitbfac782b691e61c20168aa473708dd16aa4a5eda (patch)
tree2d36c028915669939703cae890ce1b86b84d3b73 /src
parent2d0bbfcaed310879ba66e1728a029929773b0f39 (diff)
parentdc425e2e64863d4e1aa0f2bb41f7bfa3cd14b558 (diff)
downloadrust-bfac782b691e61c20168aa473708dd16aa4a5eda.tar.gz
rust-bfac782b691e61c20168aa473708dd16aa4a5eda.zip
Rollup merge of #52064 - Valloric:patch-1, r=cramertj
Clarifying how the alignment of the struct works

The docs were not specifying how to compute the alignment of the struct, so I had to spend some time trying to figure out how that works. Found the answer [on this page](http://camlorn.net/posts/April%202017/rust-struct-field-reordering.html):

> The total size of this struct is 5, but the most-aligned field is b with alignment 2, so we round up to 6 and give the struct an alignment of 2 bytes.
Diffstat (limited to 'src')
-rw-r--r--src/libcore/mem.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/libcore/mem.rs b/src/libcore/mem.rs
index 84173654655..8fb4e0d6a02 100644
--- a/src/libcore/mem.rs
+++ b/src/libcore/mem.rs
@@ -229,6 +229,8 @@ pub fn forget<T>(t: T) {
 /// 2. Round up the current size to the nearest multiple of the next field's [alignment].
 ///
 /// Finally, round the size of the struct to the nearest multiple of its [alignment].
+/// The alignment of the struct is usually the largest alignment of all its
+/// fields; this can be changed with the use of `repr(align(N))`.
 ///
 /// Unlike `C`, zero sized structs are not rounded up to one byte in size.
 ///
@@ -283,7 +285,8 @@ pub fn forget<T>(t: T) {
 /// // The size of the second field is 2, so add 2 to the size. Size is 4.
 /// // The alignment of the third field is 1, so add 0 to the size for padding. Size is 4.
 /// // The size of the third field is 1, so add 1 to the size. Size is 5.
-/// // Finally, the alignment of the struct is 2, so add 1 to the size for padding. Size is 6.
+/// // Finally, the alignment of the struct is 2 (because the largest alignment amongst its
+/// // fields is 2), so add 1 to the size for padding. Size is 6.
 /// assert_eq!(6, mem::size_of::<FieldStruct>());
 ///
 /// #[repr(C)]