diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2014-02-10 14:41:57 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2014-02-13 20:29:47 -0800 |
| commit | aaead93c4554b685935b70565fc1bb54edd945d6 (patch) | |
| tree | eb291588f17087567300d324bac4e7a686ccc0b9 /src/libstd/rt | |
| parent | d5e0622f95252e442b909011129336c11ddb0151 (diff) | |
| download | rust-aaead93c4554b685935b70565fc1bb54edd945d6.tar.gz rust-aaead93c4554b685935b70565fc1bb54edd945d6.zip | |
Don't allocate in LocalHeap::new()
One of these is allocated for every task, trying to cut down on allocations cc #11389
Diffstat (limited to 'src/libstd/rt')
| -rw-r--r-- | src/libstd/rt/local_heap.rs | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/libstd/rt/local_heap.rs b/src/libstd/rt/local_heap.rs index 023f712d3a0..7acce2ecb5b 100644 --- a/src/libstd/rt/local_heap.rs +++ b/src/libstd/rt/local_heap.rs @@ -23,6 +23,7 @@ use rt::local::Local; use rt::task::Task; use unstable::raw; use vec::ImmutableVector; +use vec_ng::Vec; // This has no meaning with out rtdebug also turned on. #[cfg(rtdebug)] @@ -33,7 +34,7 @@ static MAGIC: u32 = 0xbadc0ffe; pub type Box = raw::Box<()>; pub struct MemoryRegion { - priv allocations: ~[*AllocHeader], + priv allocations: Vec<*AllocHeader>, priv live_allocations: uint, } @@ -48,7 +49,7 @@ impl LocalHeap { #[inline] pub fn new() -> LocalHeap { let region = MemoryRegion { - allocations: ~[], + allocations: Vec::new(), live_allocations: 0, }; LocalHeap { @@ -248,8 +249,8 @@ impl MemoryRegion { fn release(&mut self, alloc: &AllocHeader) { alloc.assert_sane(); if TRACK_ALLOCATIONS > 1 { - rtassert!(self.allocations[alloc.index] == alloc as *AllocHeader); - self.allocations[alloc.index] = ptr::null(); + rtassert!(self.allocations.as_slice()[alloc.index] == alloc as *AllocHeader); + self.allocations.as_mut_slice()[alloc.index] = ptr::null(); } } #[cfg(not(rtdebug))] @@ -260,8 +261,8 @@ impl MemoryRegion { fn update(&mut self, alloc: &mut AllocHeader, orig: *AllocHeader) { alloc.assert_sane(); if TRACK_ALLOCATIONS > 1 { - rtassert!(self.allocations[alloc.index] == orig); - self.allocations[alloc.index] = &*alloc as *AllocHeader; + rtassert!(self.allocations.as_slice()[alloc.index] == orig); + self.allocations.as_mut_slice()[alloc.index] = &*alloc as *AllocHeader; } } #[cfg(not(rtdebug))] @@ -274,7 +275,7 @@ impl Drop for MemoryRegion { if self.live_allocations != 0 { rtabort!("leaked managed memory ({} objects)", self.live_allocations); } - rtassert!(self.allocations.iter().all(|s| s.is_null())); + rtassert!(self.allocations.as_slice().iter().all(|s| s.is_null())); } } |
