Chromium Code Reviews| Index: src/spaces-inl.h |
| diff --git a/src/spaces-inl.h b/src/spaces-inl.h |
| index 0b4315c93be13c244fc882b30392b6cac943d494..5e1d424f3ba0b148fd45d2d183b783c105745d4a 100644 |
| --- a/src/spaces-inl.h |
| +++ b/src/spaces-inl.h |
| @@ -127,20 +127,19 @@ Address Page::ComputeRSetBitPosition(Address address, int offset, |
| if (rset_address >= page->RSetEnd()) { |
| // We have a large object page, and the remembered set address is actually |
| - // past the end of the object. The address of the remembered set in this |
| - // case is the extra remembered set start address at the address of the |
| - // end of the object: |
| + // past the end of the object. |
| + |
|
William Hesse
2009/08/05 10:17:50
Rather than saying "FixedArray" everywhere in comm
|
| + // The first part of the remembered set is still located at the start of |
| + // the page, but anything after kRSetEndOffset must be relocated to after |
| + // the FixedArray, i.e. after |
| // (page->ObjectAreaStart() + object size) |
| - // plus the offset of the computed remembered set address from the start |
| - // of the object: |
| - // (rset_address - page->ObjectAreaStart()). |
| - // Ie, we can just add the object size. |
| - // In the X64 architecture, the remembered set ends before the object start, |
| - // so we need to add an additional offset, from rset end to object start |
| + // We do that by adding the difference between the normal RSet's end and |
| + // the object's end. |
| ASSERT(HeapObject::FromAddress(address)->IsFixedArray()); |
| - rset_address += kObjectStartOffset - kRSetEndOffset + |
| + int fixedarray_length = |
| FixedArray::SizeFor(Memory::int_at(page->ObjectAreaStart() |
| + Array::kLengthOffset)); |
| + rset_address += kObjectStartOffset - kRSetEndOffset + fixedarray_length; |
| } |
| return rset_address; |
| } |