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 20namespace v8 { 21namespace internal { 22 23 24static const int kASanRedzoneBytes = 24; // Must be a multiple of 8. 25 26 27bool Zone::excess_allocation() { 28 return segment_bytes_allocated_ > kExcessLimit; 29} 30 31 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 38template <typename Config> 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 47void* ZoneObject::operator new(size_t size, Zone* zone) { 48 return zone->New(static_cast<int>(size)); 49} 50 51inline void* ZoneAllocationPolicy::New(size_t size) { 52 DCHECK(zone_); 53 return zone_->New(static_cast<int>(size)); 54} 55 56 57template <typename T> 58void* ZoneList<T>::operator new(size_t size, Zone* zone) { 59 return zone->New(static_cast<int>(size)); 60} 61 62 63template <typename T> 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