MemoryLayout — 메모리 레이아웃
MemoryLayout — 메모리 레이아웃
MemoryLayout는 메모리 세그먼트의 내용을 설명합니다. 레이아웃 계층에는 두 가지 잎(leaf)이 있습니다.
- 주어진 크기와 종류의 값을 나타내는 데 사용되는 값 레이아웃(value layout)
- 이름이 나타내는 대로 내용을 무시해야 하는 메모리 세그먼트의 일부를 나타내며 주로 정렬 이유로 존재하는 패딩 레이아웃(padding layout)
본문
ValueLayout.JAVA_INT와 ValueLayout.JAVA_FLOAT_UNALIGNED 같은 일반적인 값 레이아웃 상수는 ValueLayout 클래스에 정의됩니다. 레이아웃 중에도 특별한 종류인 주소 레이아웃(address layout)은 메모리 영역의 주소를 나타내는 값을 모델링하는 데 사용됩니다.
public sealed interface MemoryLayout
permits SequenceLayout, GroupLayout, PaddingLayout, ValueLayout
더 복잡한 레이아웃은 단순한 것에서 파생될 수 있습니다.
- 시퀀스 레이아웃(sequence layout)은 요소 레이아웃의 0개 이상의 발생을 균질하게 반복하는 것을 나타냅니다.
- 그룹 레이아웃(group layout)은 0개 이상의 멤버 레이아웃의 이질적 집합을 나타냅니다.
- 그룹 레이아웃은 구조체 레이아웃(멤버가 차례로 배치)과 공용체 레이아웃(멤버가 같은 시작 오프셋에 배치)의 두 가지 형태가 있습니다.
주요 메서드
long byteSize()
Optional<String> name()
MemoryLayout withName(String name)
MemoryLayout withoutName()
long byteAlignment()
MemoryLayout withByteAlignment(long byteAlignment)
default long byteOffset(MemoryLayout.PathElement... elements)
default VarHandle varHandle(MemoryLayout.PathElement... elements)
default MemoryLayout select(MemoryLayout.PathElement... elements)
boolean equals(Object other)
int hashCode()
String toString()
팩토리 메서드
static PaddingLayout paddingLayout(long byteSize)
static SequenceLayout sequenceLayout(long elementCount, MemoryLayout elementLayout)
static SequenceLayout sequenceLayout(MemoryLayout elementLayout)
static StructLayout structLayout(MemoryLayout... elements)
static UnionLayout unionLayout(MemoryLayout... elements)
paddingLayout는 패딩 레이아웃을 만듭니다.sequenceLayout는 시퀀스 레이아웃을 만듭니다.structLayout/unionLayout는 구조체·공용체 그룹 레이아웃을 만듭니다.