void ScanStaticData(DirectReferenceVisitor referenceVisitor) { Finalizer.VisitBootstrapData(referenceVisitor); for (int section = 0; section < sectionCount; section++) { int size = (int) (*(dataSectionEnd + section) - *(dataSectionBase + section)); int iters = (size + 31) / 32; UIntPtr *ptr = *(dataSectionBase + section); uint * pointerBitmap = *(staticDataPointerBitMap + section); for (int i = 0; i < iters; i++) { uint mask = *pointerBitmap++; if (mask != 0) { for (int j = 0; j < 32; j++) { if ((mask & 1) != 0 && *ptr != UIntPtr.Zero) { referenceVisitor.Visit(ptr); } ptr++; mask >>= 1; } } else { ptr += 32; } } } }