| r[runtime] | |
| # The Rust runtime | |
| r[runtime.intro] | |
| This section documents features that define some aspects of the Rust runtime. | |
| <!-- template:attributes --> | |
| r[runtime.global_allocator] | |
| ## The `global_allocator` attribute | |
| r[runtime.global_allocator.intro] | |
| The *`global_allocator` [attribute][attributes]* selects a [memory allocator][std::alloc]. | |
| > [!EXAMPLE] | |
| > ```rust | |
| > use core::alloc::{GlobalAlloc, Layout}; | |
| > use std::alloc::System; | |
| > | |
| > struct MyAllocator; | |
| > | |
| > unsafe impl GlobalAlloc for MyAllocator { | |
| > unsafe fn alloc(&self, layout: Layout) -> *mut u8 { | |
| > unsafe { System.alloc(layout) } | |
| > } | |
| > unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { | |
| > unsafe { System.dealloc(ptr, layout) } | |
| > } | |
| > } | |
| > | |
| > #[global_allocator] | |
| > static GLOBAL: MyAllocator = MyAllocator; | |
| > ``` | |
| r[runtime.global_allocator.syntax] | |
| The `global_allocator` attribute uses the [MetaWord] syntax. | |
| r[runtime.global_allocator.allowed-positions] | |
| The `global_allocator` attribute may only be applied to a [static item] whose type implements the [`GlobalAlloc`] trait. | |
| r[runtime.global_allocator.duplicates] | |
| The `global_allocator` attribute may only be used once on an item. | |
| r[runtime.global_allocator.single] | |
| The `global_allocator` attribute may only be used once in the crate graph. | |
| r[runtime.global_allocator.stdlib] | |
| The `global_allocator` attribute is exported from the [standard library prelude][core::prelude::v1]. | |
| <!-- template:attributes --> | |
| r[runtime.windows_subsystem] | |
| ## The `windows_subsystem` attribute | |
| r[runtime.windows_subsystem.intro] | |
| The *`windows_subsystem` [attribute][attributes]* sets the [subsystem] when linking on a Windows target. | |
| > [!EXAMPLE] | |
| > ```rust | |
| > #![windows_subsystem = "windows"] | |
| > ``` | |
| r[runtime.windows_subsystem.syntax] | |
| The `windows_subsystem` attribute uses the [MetaNameValueStr] syntax. Accepted values are `"console"` and `"windows"`. | |
| r[runtime.windows_subsystem.allowed-positions] | |
| The `windows_subsystem` attribute may only be applied to the crate root. | |
| r[runtime.windows_subsystem.duplicates] | |
| Only the first use of `windows_subsystem` has effect. | |
| > [!NOTE] | |
| > `rustc` lints against any use following the first. This may become an error in the future. | |
| r[runtime.windows_subsystem.ignored] | |
| The `windows_subsystem` attribute is ignored on non-Windows targets and non-`bin` [crate types]. | |
| r[runtime.windows_subsystem.console] | |
| The `"console"` subsystem is the default. If a console process is run from an existing console then it will be attached to that console; otherwise a new console window will be created. | |
| r[runtime.windows_subsystem.windows] | |
| The `"windows"` subsystem will run detached from any existing console. | |
| > [!NOTE] | |
| > The `"windows"` subsystem is commonly used by GUI applications that do not want to display a console window on startup. | |
| [`GlobalAlloc`]: alloc::alloc::GlobalAlloc | |
| [crate types]: linkage.md | |
| [static item]: items/static-items.md | |
| [subsystem]: https://msdn.microsoft.com/en-us/library/fcc1zstk.aspx |