@Override
	MemoryBlockDB createInitializedBlock(String name, Address startAddr, DBBuffer buf, int flags)
			throws AddressOverflowException, IOException {
		updateAddressMapForAllAddresses(startAddr, buf.length());

		List<SubMemoryBlock> subBlocks = new ArrayList<>();
		DBRecord blockRecord = createMemoryBlockRecord(name, startAddr, buf.length(), flags);
		long key = blockRecord.getKey();

		DBRecord subRecord =
			createSubBlockRecord(key, 0, buf.length(), V3_SUB_TYPE_BUFFER, buf.getId(), 0);
		subBlockTable.putRecord(subRecord);
		subBlocks.add(new BufferSubMemoryBlock(this, subRecord));

		memBlockTable.putRecord(blockRecord);
		MemoryBlockDB newBlock = new MemoryBlockDB(this, blockRecord, subBlocks);
		cacheNewBlock(newBlock);
		return newBlock;
	}
MemoryMap adapter for version 3.
This version introduces the concept of sub memory blocks and FileBytes
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV3.java