mirror of
				https://github.com/bspeice/speice.io
				synced 2025-10-31 01:20:31 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			34 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| layout: post
 | |
| title: "Summary: What Are the Rules?"
 | |
| description: "A synopsis and reference."
 | |
| category: 
 | |
| tags: [rust, understanding-allocations]
 | |
| ---
 | |
| 
 | |
| While there's a lot of interesting detail captured in this series, it's often helpful
 | |
| to have a document that answers some "yes/no" questions. You may not care about
 | |
| what an `Iterator` looks like in assembly, you just need to know whether it allocates
 | |
| an object on the heap or not. And while Rust will prioritize the fastest behavior it can,
 | |
| here are the rules for each memory type:
 | |
| 
 | |
| **Heap Allocation**:
 | |
| - Smart pointers (`Box`, `Rc`, `Mutex`, etc.) allocate their contents in heap memory.
 | |
| - Collections (`HashMap`, `Vec`, `String`, etc.) allocate their contents in heap memory.
 | |
| - Some smart pointers in the standard library have counterparts in other crates that
 | |
|   don't need heap memory. If possible, use those.
 | |
| 
 | |
| **Stack Allocation**:
 | |
| - Everything not using a smart pointer will be allocated on the stack.
 | |
| - Structs, enums, iterators, arrays, and closures are all stack allocated.
 | |
| - Cell types (`RefCell`) behave like smart pointers, but are stack-allocated.
 | |
| - Inlining (`#[inline]`) will not affect allocation behavior for better or worse.
 | |
| - Types that are marked `Copy` are guaranteed to have their contents stack-allocated.
 | |
| 
 | |
| **Global Allocation**:
 | |
| - `const` is a fixed value; the compiler is allowed to copy it wherever useful.
 | |
| - `static` is a fixed reference; the compiler will guarantee it is unique.
 | |
| 
 | |
| 
 | |
| -- [Raph Levien](https://docs.google.com/presentation/d/1q-c7UAyrUlM-eZyTo1pd8SZ0qwA_wYxmPZVOQkoDmH4/edit?usp=sharing)
 |