| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_SPACES_H_ | 5 #ifndef V8_SPACES_H_ |
| 6 #define V8_SPACES_H_ | 6 #define V8_SPACES_H_ |
| 7 | 7 |
| 8 #include "allocation.h" | 8 #include "allocation.h" |
| 9 #include "hashmap.h" | 9 #include "hashmap.h" |
| 10 #include "list.h" | 10 #include "list.h" |
| (...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 727 private: | 727 private: |
| 728 // next_chunk_ holds a pointer of type MemoryChunk | 728 // next_chunk_ holds a pointer of type MemoryChunk |
| 729 AtomicWord next_chunk_; | 729 AtomicWord next_chunk_; |
| 730 // prev_chunk_ holds a pointer of type MemoryChunk | 730 // prev_chunk_ holds a pointer of type MemoryChunk |
| 731 AtomicWord prev_chunk_; | 731 AtomicWord prev_chunk_; |
| 732 | 732 |
| 733 friend class MemoryAllocator; | 733 friend class MemoryAllocator; |
| 734 }; | 734 }; |
| 735 | 735 |
| 736 | 736 |
| 737 STATIC_CHECK(sizeof(MemoryChunk) <= MemoryChunk::kHeaderSize); | 737 STATIC_ASSERT(sizeof(MemoryChunk) <= MemoryChunk::kHeaderSize); |
| 738 | 738 |
| 739 | 739 |
| 740 // ----------------------------------------------------------------------------- | 740 // ----------------------------------------------------------------------------- |
| 741 // A page is a memory chunk of a size 1MB. Large object pages may be larger. | 741 // A page is a memory chunk of a size 1MB. Large object pages may be larger. |
| 742 // | 742 // |
| 743 // The only way to get a page pointer is by calling factory methods: | 743 // The only way to get a page pointer is by calling factory methods: |
| 744 // Page* p = Page::FromAddress(addr); or | 744 // Page* p = Page::FromAddress(addr); or |
| 745 // Page* p = Page::FromAllocationTop(top); | 745 // Page* p = Page::FromAllocationTop(top); |
| 746 class Page : public MemoryChunk { | 746 class Page : public MemoryChunk { |
| 747 public: | 747 public: |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 834 #undef FRAGMENTATION_STATS_ACCESSORS | 834 #undef FRAGMENTATION_STATS_ACCESSORS |
| 835 | 835 |
| 836 #ifdef DEBUG | 836 #ifdef DEBUG |
| 837 void Print(); | 837 void Print(); |
| 838 #endif // DEBUG | 838 #endif // DEBUG |
| 839 | 839 |
| 840 friend class MemoryAllocator; | 840 friend class MemoryAllocator; |
| 841 }; | 841 }; |
| 842 | 842 |
| 843 | 843 |
| 844 STATIC_CHECK(sizeof(Page) <= MemoryChunk::kHeaderSize); | 844 STATIC_ASSERT(sizeof(Page) <= MemoryChunk::kHeaderSize); |
| 845 | 845 |
| 846 | 846 |
| 847 class LargePage : public MemoryChunk { | 847 class LargePage : public MemoryChunk { |
| 848 public: | 848 public: |
| 849 HeapObject* GetObject() { | 849 HeapObject* GetObject() { |
| 850 return HeapObject::FromAddress(area_start()); | 850 return HeapObject::FromAddress(area_start()); |
| 851 } | 851 } |
| 852 | 852 |
| 853 inline LargePage* next_page() const { | 853 inline LargePage* next_page() const { |
| 854 return static_cast<LargePage*>(next_chunk()); | 854 return static_cast<LargePage*>(next_chunk()); |
| 855 } | 855 } |
| 856 | 856 |
| 857 inline void set_next_page(LargePage* page) { | 857 inline void set_next_page(LargePage* page) { |
| 858 set_next_chunk(page); | 858 set_next_chunk(page); |
| 859 } | 859 } |
| 860 private: | 860 private: |
| 861 static inline LargePage* Initialize(Heap* heap, MemoryChunk* chunk); | 861 static inline LargePage* Initialize(Heap* heap, MemoryChunk* chunk); |
| 862 | 862 |
| 863 friend class MemoryAllocator; | 863 friend class MemoryAllocator; |
| 864 }; | 864 }; |
| 865 | 865 |
| 866 STATIC_CHECK(sizeof(LargePage) <= MemoryChunk::kHeaderSize); | 866 STATIC_ASSERT(sizeof(LargePage) <= MemoryChunk::kHeaderSize); |
| 867 | 867 |
| 868 // ---------------------------------------------------------------------------- | 868 // ---------------------------------------------------------------------------- |
| 869 // Space is the abstract superclass for all allocation spaces. | 869 // Space is the abstract superclass for all allocation spaces. |
| 870 class Space : public Malloced { | 870 class Space : public Malloced { |
| 871 public: | 871 public: |
| 872 Space(Heap* heap, AllocationSpace id, Executability executable) | 872 Space(Heap* heap, AllocationSpace id, Executability executable) |
| 873 : heap_(heap), id_(id), executable_(executable) {} | 873 : heap_(heap), id_(id), executable_(executable) {} |
| 874 | 874 |
| 875 virtual ~Space() {} | 875 virtual ~Space() {} |
| 876 | 876 |
| (...skipping 2119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2996 } | 2996 } |
| 2997 // Must be small, since an iteration is used for lookup. | 2997 // Must be small, since an iteration is used for lookup. |
| 2998 static const int kMaxComments = 64; | 2998 static const int kMaxComments = 64; |
| 2999 }; | 2999 }; |
| 3000 #endif | 3000 #endif |
| 3001 | 3001 |
| 3002 | 3002 |
| 3003 } } // namespace v8::internal | 3003 } } // namespace v8::internal |
| 3004 | 3004 |
| 3005 #endif // V8_SPACES_H_ | 3005 #endif // V8_SPACES_H_ |
| OLD | NEW |