1 // Copyright 2012 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_ZONE_INL_H_ 6 #define V8_ZONE_INL_H_ 7 8 #include "src/zone.h" 9 10 #ifdef V8_USE_ADDRESS_SANITIZER 11 #include <sanitizer/asan_interface.h> 12 #else 13 #define ASAN_UNPOISON_MEMORY_REGION(start, size) ((void) 0) 14 #endif 15 16 #include "src/counters.h" 17 #include "src/isolate.h" 18 #include "src/utils.h" 19 20 namespace v8 { 21 namespace internal { 22 23 24 static const int kASanRedzoneBytes = 24; // Must be a multiple of 8. 25 26 excess_allocation()27bool Zone::excess_allocation() { 28 return segment_bytes_allocated_ > kExcessLimit; 29 } 30 31 adjust_segment_bytes_allocated(int delta)32void Zone::adjust_segment_bytes_allocated(int delta) { 33 segment_bytes_allocated_ += delta; 34 isolate_->counters()->zone_segment_bytes()->Set(segment_bytes_allocated_); 35 } 36 37 38 template <typename Config> ~ZoneSplayTree()39ZoneSplayTree<Config>::~ZoneSplayTree() { 40 // Reset the root to avoid unneeded iteration over all tree nodes 41 // in the destructor. For a zone-allocated tree, nodes will be 42 // freed by the Zone. 43 SplayTree<Config, ZoneAllocationPolicy>::ResetRoot(); 44 } 45 46 new(size_t size,Zone * zone)47void* ZoneObject::operator new(size_t size, Zone* zone) { 48 return zone->New(static_cast<int>(size)); 49 } 50 New(size_t size)51inline void* ZoneAllocationPolicy::New(size_t size) { 52 DCHECK(zone_); 53 return zone_->New(static_cast<int>(size)); 54 } 55 56 57 template <typename T> new(size_t size,Zone * zone)58void* ZoneList<T>::operator new(size_t size, Zone* zone) { 59 return zone->New(static_cast<int>(size)); 60 } 61 62 63 template <typename T> new(size_t size,Zone * zone)64void* ZoneSplayTree<T>::operator new(size_t size, Zone* zone) { 65 return zone->New(static_cast<int>(size)); 66 } 67 68 69 } } // namespace v8::internal 70 71 #endif // V8_ZONE_INL_H_ 72