0Pricing
Java Academy · Ders

Düzenler ve Yapılar

Yerel bellek düzenlerini açıklayın

Düzenler ve Yapılar, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Yerel Belleği Açıklama

Yerel veriler nadiren tek bir değerden oluşur. C, yapılar, diziler ve birleşimler kullanır. FFM bu şekilleri bellek yerleşimleriyle modeller; böylece yapılandırılmış yerel belleği güvenle okuyup yazabilirsiniz.

Yerleşim Ailesi

Yerleşim türleri küçük bir hiyerarşi oluşturur:

  • ValueLayout: bir ilkel değer (tamsayı, uzun tamsayı, ondalık sayı, adres)
  • SequenceLayout: bir yerleşimden oluşan sabit boyutlu dizi
  • StructLayout: alanların sıralı biçimde yerleştirildiği yapı
  • UnionLayout: çakışan alanlar

Değer Yerleşimi

En basit yerleşimler, yerleşik değer yerleşimleridir. Boyut, hizalama ve bayt sırası bilgilerini taşırlar.

import java.lang.foreign.ValueLayout;

public class Main {
    public static void main(String[] args) {
        System.out.println("int size: " + ValueLayout.JAVA_INT.byteSize());
        System.out.println("double size: " + ValueLayout.JAVA_DOUBLE.byteSize());
    }
}

Yapı Tanımlama

Bir C yapısını MemoryLayout.structLayout(...) ile modelleyin ve her alanı withName ile adlandırın. C'deki struct Point { int x; int y; } yapısını düşünün.

import java.lang.foreign.*;

public class Main {
    public static void main(String[] args) {
        StructLayout point = MemoryLayout.structLayout(
            ValueLayout.JAVA_INT.withName("x"),
            ValueLayout.JAVA_INT.withName("y"));
        System.out.println("Point size: " + point.byteSize());
    }
}

Alanlar için VarHandle

Adlandırılmış bir alanı okumak veya yazmak için bir yol ifadesi kullanarak VarHandle türetin. groupElement("x"), alanı adına göre seçer.

import java.lang.foreign.*;
import java.lang.invoke.VarHandle;

public class Main {
    public static void main(String[] args) {
        StructLayout point = MemoryLayout.structLayout(
            ValueLayout.JAVA_INT.withName("x"),
            ValueLayout.JAVA_INT.withName("y"));
        VarHandle xHandle = point.varHandle(
            MemoryLayout.PathElement.groupElement("x"));
        System.out.println("Built VarHandle for x: " + xHandle);
    }
}

Yapı Okuma ve Yazma

Yerleşimin boyutuna uygun bir bölge ayırın, ardından alanları ayarlamak ve almak için değişken tutamaçlarını kullanın. Bu, bir C yapısını doldurmaya benzer.

import java.lang.foreign.*;
import java.lang.invoke.VarHandle;

public class Main {
    public static void main(String[] args) {
        StructLayout point = MemoryLayout.structLayout(
            ValueLayout.JAVA_INT.withName("x"),
            ValueLayout.JAVA_INT.withName("y"));
        VarHandle xh = point.varHandle(MemoryLayout.PathElement.groupElement("x"));
        VarHandle yh = point.varHandle(MemoryLayout.PathElement.groupElement("y"));
        try (Arena arena = Arena.ofConfined()) {
            MemorySegment p = arena.allocate(point);
            xh.set(p, 0L, 3);
            yh.set(p, 0L, 4);
            System.out.println("Point = (" + xh.get(p, 0L) + ", " + yh.get(p, 0L) + ")");
        }
    }
}

Doldurma ve Hizalama

C derleyicileri, alanların hizalanması için doldurma ekler. FFM bunu otomatik olarak eklemez; bu nedenle C yerleşimiyle tam olarak eşleşmesi için MemoryLayout.paddingLayout(n) eklemelisiniz.

Hizalamayı yanlış yapmak, boşluktan sonraki tüm alanları bozar.

Açık Doldurma Örneği

struct { char c; int n; } için int 4 baytla hizalanmalıdır; bu nedenle karakter alanının ardından 3 doldurma baytı gelir.

import java.lang.foreign.*;

public class Main {
    public static void main(String[] args) {
        StructLayout s = MemoryLayout.structLayout(
            ValueLayout.JAVA_BYTE.withName("c"),
            MemoryLayout.paddingLayout(3),
            ValueLayout.JAVA_INT.withName("n"));
        System.out.println("Aligned struct size: " + s.byteSize());
    }
}

Dizi Yerleşimleri

Bir SequenceLayout bir diziyi açıklar. MemoryLayout.sequenceLayout(count, element), örneğin 10 double değerinden oluşan bir diziyi modeller.

import java.lang.foreign.*;

public class Main {
    public static void main(String[] args) {
        SequenceLayout arr = MemoryLayout.sequenceLayout(10, ValueLayout.JAVA_DOUBLE);
        System.out.println("Array bytes: " + arr.byteSize());
    }
}

İç İçe Yerleşimler

Yerleşimler birleştirilebilir. Bir yapı bir dizi, bir dizi de yapılar içerebilir. sequenceElement() ve groupElement(name) gibi yol ifadeleri, iç içe geçmiş verilerin derinliklerine ulaşır.

Bu yaklaşım, her türlü karmaşıklıktaki gerçek dünya C veri yapılarını ele alır.

Ofsetler ve Dilimleme

Bir alanın byteOffset değerini yolundan sorgulayabilir ve bir alt bölge elde etmek için segment.asSlice(offset, size) kullanabilirsiniz. Bu, bir yapının tek bir alanını yerel bir işleve geçirmek için kullanışlıdır.

Hızlı Kontrol

Yapılarla ilgili yaygın bir tuzağı hatırlayınız.

Özet

Yerel verileri açıklamayı öğrendiniz:

  • Yerleşim ailesi: ValueLayout, SequenceLayout, StructLayout, UnionLayout
  • Alanları withName ile adlandırın; VarHandle ve yol öğeleriyle erişin
  • Doğru hizalama için açıkça paddingLayout ekleyin
  • İç içe yerleşimleri birleştirin ve asSlice ile dilimleyin

Foreign Function and Memory API kursu burada tamamlanır.

Sıkça Sorulan Sorular

“Düzenler ve Yapılar” dersi ücretsiz mi?

Evet — “Düzenler ve Yapılar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“Düzenler ve Yapılar” dersinde ne öğreneceğim?

Yerel bellek düzenlerini açıklayın Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Düzenler ve Yapılar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. JNI Yerine FFM Neden Tercih Edilir
  2. MemorySegment ve Arena
  3. Downcall Tanıtıcıları
  4. Düzenler ve Yapılar
← Java Academy Sayfasına Dön