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 27 bool Zone::excess_allocation() { 28 return segment_bytes_allocated_ > kExcessLimit; 29 } 30 31 32 void 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> 39 ZoneSplayTree<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 47 void* ZoneObject::operator new(size_t size, Zone* zone) { 48 return zone->New(static_cast<int>(size)); 49 } 50 51 inline void* ZoneAllocationPolicy::New(size_t size) { 52 DCHECK(zone_); 53 return zone_->New(static_cast<int>(size)); 54 } 55 56 57 template <typename T> 58 void* ZoneList<T>::operator new(size_t size, Zone* zone) { 59 return zone->New(static_cast<int>(size)); 60 } 61 62 63 template <typename T> 64 void* 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