140 void AdaptiveFreeList<Chunk>::verify_stats() const {
141 // The +1 of the LH comparand is to allow some "looseness" in
142 // checking: we usually call this interface when adding a block
143 // and we'll subsequently update the stats; we cannot update the
144 // stats beforehand because in the case of the large-block BT
145 // dictionary for example, this might be the first block and
146 // in that case there would be no place that we could record
147 // the stats (which are kept in the block itself).
148 assert((_allocation_stats.prev_sweep() + _allocation_stats.split_births()
149 + _allocation_stats.coal_births() + 1) // Total Production Stock + 1
150 >= (_allocation_stats.split_deaths() + _allocation_stats.coal_deaths()
151 + (ssize_t)count()), // Total Current Stock + depletion
152 err_msg("FreeList " PTR_FORMAT " of size " SIZE_FORMAT
153 " violates Conservation Principle: "
154 "prev_sweep(" SIZE_FORMAT ")"
155 " + split_births(" SIZE_FORMAT ")"
156 " + coal_births(" SIZE_FORMAT ") + 1 >= "
157 " split_deaths(" SIZE_FORMAT ")"
158 " coal_deaths(" SIZE_FORMAT ")"
159 " + count(" SSIZE_FORMAT ")",
160 this, size(), _allocation_stats.prev_sweep(), _allocation_stats.split_births(),
161 _allocation_stats.split_births(), _allocation_stats.split_deaths(),
162 _allocation_stats.coal_deaths(), count()));
163 }
164 #endif
165
166 // Needs to be after the definitions have been seen.
167 template class AdaptiveFreeList<FreeChunk>;
|
140 void AdaptiveFreeList<Chunk>::verify_stats() const {
141 // The +1 of the LH comparand is to allow some "looseness" in
142 // checking: we usually call this interface when adding a block
143 // and we'll subsequently update the stats; we cannot update the
144 // stats beforehand because in the case of the large-block BT
145 // dictionary for example, this might be the first block and
146 // in that case there would be no place that we could record
147 // the stats (which are kept in the block itself).
148 assert((_allocation_stats.prev_sweep() + _allocation_stats.split_births()
149 + _allocation_stats.coal_births() + 1) // Total Production Stock + 1
150 >= (_allocation_stats.split_deaths() + _allocation_stats.coal_deaths()
151 + (ssize_t)count()), // Total Current Stock + depletion
152 err_msg("FreeList " PTR_FORMAT " of size " SIZE_FORMAT
153 " violates Conservation Principle: "
154 "prev_sweep(" SIZE_FORMAT ")"
155 " + split_births(" SIZE_FORMAT ")"
156 " + coal_births(" SIZE_FORMAT ") + 1 >= "
157 " split_deaths(" SIZE_FORMAT ")"
158 " coal_deaths(" SIZE_FORMAT ")"
159 " + count(" SSIZE_FORMAT ")",
160 p2i(this), size(), _allocation_stats.prev_sweep(), _allocation_stats.split_births(),
161 _allocation_stats.split_births(), _allocation_stats.split_deaths(),
162 _allocation_stats.coal_deaths(), count()));
163 }
164 #endif
165
166 // Needs to be after the definitions have been seen.
167 template class AdaptiveFreeList<FreeChunk>;
|