• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
Initialize(size_t size)23   void Initialize(size_t size) { size_ = size; }
24 
zone()25   Zone* zone() const { return zone_; }
set_zone(Zone * const zone)26   void set_zone(Zone* const zone) { zone_ = zone; }
27 
next()28   Segment* next() const { return next_; }
set_next(Segment * const next)29   void set_next(Segment* const next) { next_ = next; }
30 
size()31   size_t size() const { return size_; }
capacity()32   size_t capacity() const { return size_ - sizeof(Segment); }
33 
start()34   Address start() const { return address(sizeof(Segment)); }
end()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.
address(size_t n)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_
61