diff options
| author | kennytm <kennytm@gmail.com> | 2018-11-13 13:03:22 +0800 |
|---|---|---|
| committer | kennytm <kennytm@gmail.com> | 2018-11-13 19:20:57 +0800 |
| commit | 99986a5a057a02fb37e41c3e4fe20db1f75aa6cc (patch) | |
| tree | dcbf06fee8f815bd3a1bae86b246ec0b98e9daa4 | |
| parent | c246a2981383e47ab667e788d8f0a0c65bae4c91 (diff) | |
| parent | 075983c70ba20f31fc1279dacae6d6fcb8bc9cad (diff) | |
Rollup merge of #55889 - RalfJung:global-alloc, r=alexcrichton
global allocators: add a few comments These comments answer some questions that came up when I tried to understand how the control flow works for the global allocator, `Global` and `System`. r? @alexcrichton
| -rw-r--r-- | src/liballoc/alloc.rs | 4 | ||||
| -rw-r--r-- | src/libstd/alloc.rs | 5 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/liballoc/alloc.rs b/src/liballoc/alloc.rs index 3bd0c243b39..1a8a081e16f 100644 --- a/src/liballoc/alloc.rs +++ b/src/liballoc/alloc.rs @@ -21,6 +21,10 @@ use core::usize; pub use core::alloc::*; extern "Rust" { + // These are the magic symbols to call the global allocator. rustc generates + // them from the `#[global_allocator]` attribute if there is one, or uses the + // default implementations in libstd (`__rdl_alloc` etc in `src/libstd/alloc.rs`) + // otherwise. #[allocator] #[rustc_allocator_nounwind] fn __rust_alloc(size: usize, align: usize) -> *mut u8; diff --git a/src/libstd/alloc.rs b/src/libstd/alloc.rs index 485b2ffe197..9c057396470 100644 --- a/src/libstd/alloc.rs +++ b/src/libstd/alloc.rs @@ -142,6 +142,7 @@ pub use alloc_crate::alloc::*; #[derive(Debug, Copy, Clone)] pub struct System; +// The Alloc impl just forwards to the GlobalAlloc impl, which is in `std::sys::*::alloc`. #[unstable(feature = "allocator_api", issue = "32838")] unsafe impl Alloc for System { #[inline] @@ -226,6 +227,10 @@ pub fn rust_oom(layout: Layout) -> ! { #[unstable(feature = "alloc_internals", issue = "0")] pub mod __default_lib_allocator { use super::{System, Layout, GlobalAlloc}; + // These magic symbol names are used as a fallback for implementing the + // `__rust_alloc` etc symbols (see `src/liballoc/alloc.rs) when there is + // no `#[global_allocator]` attribute. + // for symbol names src/librustc/middle/allocator.rs // for signatures src/librustc_allocator/lib.rs |
