mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-11 07:21:51 +00:00
Rollup merge of #44648 - Havvy:doc-size_of, r=dtolnay
Expand size_of docs This PR does 3 things. 1. Adds a description of what pointer size means to the primitive pages for usize and isize. 2. Says the general size of things is not stable from compiler to compiler. 3. Adds a table of sizes of things that we do guarantee. As this is the first table in the libstd docs, I've included a picture of how that looks. ![](https://i.imgur.com/YZ6IChH.png?1)
This commit is contained in:
commit
04eb88c987
@ -177,15 +177,59 @@ pub fn forget<T>(t: T) {
|
|||||||
|
|
||||||
/// Returns the size of a type in bytes.
|
/// Returns the size of a type in bytes.
|
||||||
///
|
///
|
||||||
/// More specifically, this is the offset in bytes between successive
|
/// More specifically, this is the offset in bytes between successive elements
|
||||||
/// items of the same type, including alignment padding.
|
/// in an array with that item type including alignment padding. Thus, for any
|
||||||
|
/// type `T` and length `n`, `[T; n]` has a size of `n * size_of::<T>()`.
|
||||||
|
///
|
||||||
|
/// In general, the size of a type is not stable across compilations, but
|
||||||
|
/// specific types such as primitives are.
|
||||||
|
///
|
||||||
|
/// The following table gives the size for primitives.
|
||||||
|
///
|
||||||
|
/// Type | size_of::\<Type>()
|
||||||
|
/// ---- | ---------------
|
||||||
|
/// () | 0
|
||||||
|
/// u8 | 1
|
||||||
|
/// u16 | 2
|
||||||
|
/// u32 | 4
|
||||||
|
/// u64 | 8
|
||||||
|
/// i8 | 1
|
||||||
|
/// i16 | 2
|
||||||
|
/// i32 | 4
|
||||||
|
/// i64 | 8
|
||||||
|
/// f32 | 4
|
||||||
|
/// f64 | 8
|
||||||
|
/// char | 4
|
||||||
|
///
|
||||||
|
/// Furthermore, `usize` and `isize` have the same size.
|
||||||
|
///
|
||||||
|
/// The types `*const T`, `&T`, `Box<T>`, `Option<&T>`, and `Option<Box<T>>` all have
|
||||||
|
/// the same size. If `T` is Sized, all of those types have the same size as `usize`.
|
||||||
|
///
|
||||||
|
/// The mutability of a pointer does not change its size. As such, `&T` and `&mut T`
|
||||||
|
/// have the same size. Likewise for `*const T` and `*mut T`.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use std::mem;
|
/// use std::mem;
|
||||||
///
|
///
|
||||||
|
/// // Some primitives
|
||||||
/// assert_eq!(4, mem::size_of::<i32>());
|
/// assert_eq!(4, mem::size_of::<i32>());
|
||||||
|
/// assert_eq!(8, mem::size_of::<f64>());
|
||||||
|
/// assert_eq!(0, mem::size_of::<()>());
|
||||||
|
///
|
||||||
|
/// // Some arrays
|
||||||
|
/// assert_eq!(8, mem::size_of::<[i32; 2]>());
|
||||||
|
/// assert_eq!(12, mem::size_of::<[i32; 3]>());
|
||||||
|
/// assert_eq!(0, mem::size_of::<[i32; 0]>());
|
||||||
|
///
|
||||||
|
///
|
||||||
|
/// // Pointer size equality
|
||||||
|
/// assert_eq!(mem::size_of::<&i32>(), mem::size_of::<*const i32>());
|
||||||
|
/// assert_eq!(mem::size_of::<&i32>(), mem::size_of::<Box<i32>>());
|
||||||
|
/// assert_eq!(mem::size_of::<&i32>(), mem::size_of::<Option<&i32>>());
|
||||||
|
/// assert_eq!(mem::size_of::<Box<i32>>(), mem::size_of::<Option<Box<i32>>>());
|
||||||
/// ```
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
|
@ -710,6 +710,10 @@ mod prim_u128 { }
|
|||||||
//
|
//
|
||||||
/// The pointer-sized signed integer type.
|
/// The pointer-sized signed integer type.
|
||||||
///
|
///
|
||||||
|
/// The size of this primitive is how many bytes it takes to reference any
|
||||||
|
/// location in memory. For example, on a 32 bit target, this is 4 bytes
|
||||||
|
/// and on a 64 bit target, this is 8 bytes.
|
||||||
|
///
|
||||||
/// *[See also the `std::isize` module](isize/index.html).*
|
/// *[See also the `std::isize` module](isize/index.html).*
|
||||||
///
|
///
|
||||||
/// However, please note that examples are shared between primitive integer
|
/// However, please note that examples are shared between primitive integer
|
||||||
@ -722,6 +726,10 @@ mod prim_isize { }
|
|||||||
//
|
//
|
||||||
/// The pointer-sized unsigned integer type.
|
/// The pointer-sized unsigned integer type.
|
||||||
///
|
///
|
||||||
|
/// The size of this primitive is how many bytes it takes to reference any
|
||||||
|
/// location in memory. For example, on a 32 bit target, this is 4 bytes
|
||||||
|
/// and on a 64 bit target, this is 8 bytes.
|
||||||
|
///
|
||||||
/// *[See also the `std::usize` module](usize/index.html).*
|
/// *[See also the `std::usize` module](usize/index.html).*
|
||||||
///
|
///
|
||||||
/// However, please note that examples are shared between primitive integer
|
/// However, please note that examples are shared between primitive integer
|
||||||
|
Loading…
Reference in New Issue
Block a user