public int getLength(Memory memory, Address address, byte[] bytes) {
		Program program = memory.getProgram();
		// Align this structure based on pointer size so the pointers have proper alignment.
		int pointerSize = is64Bit(program) ? 8 : 4;
		if (address.getOffset() % pointerSize != 0) {
			return 0;
		}
		// Check that we have enough bytes for the expected pointers and at least 1 byte for the
		// name string.
		if (bytes.length < (pointerSize * 2) + 1) {
			return 0;
		}
		// First component should be direct reference. (This is actually a pointer to the class functions.)
		Address vfTableAddress = getAbsoluteAddress(program, address);
		if (vfTableAddress == null || !memory.contains(vfTableAddress)) {
			return 0;
		}
		int nameOffset = getNameOffset(program);
		// Next component should be zeros. (This is actually a pointer to the class data if any.)
		for (int i = getSpareDataOffset(program); i < nameOffset; i++) {
			if (bytes[i] != 0) {
				return 0;
			}
		}
		String vfTableName = getVFTableName(new MemoryBufferImpl(memory, address));
		if (vfTableName == null) {
			return 0;
		}
		int nameLength = vfTableName.length();
		if (nameLength == 0) {
			return 0;
		}
		int lengthWithoutAlignPadding = nameOffset + nameLength;
		int mod = lengthWithoutAlignPadding % pointerSize;
		int padSize = (mod == 0) ? 0 : (pointerSize - mod);
		int paddedLength = lengthWithoutAlignPadding + padSize;
		if (paddedLength > bytes.length) {
			return 0;
		}
		if (containsWhitespace(vfTableName)) {
			return 0;
		}
		return paddedLength;
	}
Gets the total length of the data created when this data type is placed at the indicated
address in memory.
@param memory the program memory for this data.
@param address the start address of the data.
@param bytes the bytes for this data.
@return the length of the data. zero is returned if valid data can't be created at the
indicated address using this data type.
Ghidra/Features/Base/src/main/java/ghidra/app/util/datatype/microsoft/RTTI0DataType.java