V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
zone-segment.h
1 // Copyright 2016 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_ZONE_SEGMENT_H_
6 #define V8_ZONE_ZONE_SEGMENT_H_
7 
8 #include "src/v8.h"
9 
10 // Segments represent chunks of memory: They have starting address
11 // (encoded in the this pointer) and a size in bytes. Segments are
12 // chained together forming a LIFO structure with the newest segment
13 // available as segment_head_. Segments are allocated using malloc()
14 // and de-allocated using free().
15 namespace v8 {
16 namespace internal {
17 
18 // Forward declaration
19 class Zone;
20 
21 class Segment {
22  public:
23  void Initialize(size_t size) { size_ = size; }
24 
25  Zone* zone() const { return zone_; }
26  void set_zone(Zone* const zone) { zone_ = zone; }
27 
28  Segment* next() const { return next_; }
29  void set_next(Segment* const next) { next_ = next; }
30 
31  size_t size() const { return size_; }
32  size_t capacity() const { return size_ - sizeof(Segment); }
33 
34  Address start() const { return address(sizeof(Segment)); }
35  Address end() const { return address(size_); }
36 
37  // Zap the contents of the segment (but not the header).
38  void ZapContents();
39  // Zaps the header and makes the segment unusable this way.
40  void ZapHeader();
41 
42  private:
43 #ifdef DEBUG
44  // Constant byte value used for zapping dead memory in debug mode.
45  static const unsigned char kZapDeadByte = 0xcd;
46 #endif
47 
48  // Computes the address of the nth byte in this segment.
49  Address address(size_t n) const {
50  return reinterpret_cast<Address>(this) + n;
51  }
52 
53  Zone* zone_;
54  Segment* next_;
55  size_t size_;
56 };
57 } // namespace internal
58 } // namespace v8
59 
60 #endif // V8_ZONE_ZONE_SEGMENT_H_
Definition: libplatform.h:13