示例#1
0
void
MM_HeapRegionManagerTarok::setNodeAndLinkRegions(MM_EnvironmentBase *env, void *lowHeapEdge, void *highHeapEdge, uintptr_t numaNode)
{
	uintptr_t regionCount = 0;
	MM_HeapRegionDescriptor *firstRegion = NULL;

	Trc_MM_HeapRegionManager_enableRegionsInTable_Entry(env->getLanguageVMThread(), lowHeapEdge, highHeapEdge, numaNode);
	if (highHeapEdge > lowHeapEdge) {
		for (uint8_t* address = (uint8_t*)lowHeapEdge; address < highHeapEdge; address += getRegionSize()) {
			MM_HeapRegionDescriptor *region = tableDescriptorForAddress(address);
			region->setNumaNode(numaNode);
			regionCount += 1;
		}

		firstRegion = tableDescriptorForAddress(lowHeapEdge);
		firstRegion->_nextInSet = _freeRegionTable[numaNode];
		_freeRegionTable[numaNode] = firstRegion;
		internalLinkRegions(env, firstRegion, regionCount);
	}
	Trc_MM_HeapRegionManager_enableRegionsInTable_Exit(env->getLanguageVMThread(), regionCount, firstRegion, numaNode);
}