Bagikan melalui


OpCodes.Unaligned Bidang

Definisi

Menunjukkan bahwa alamat yang saat ini berada di atas tumpukan evaluasi mungkin tidak selaras dengan ukuran alami instruksi segera setelahnya ldind, , stind, ldfldstfldldobj, stobj, , initblkatau cpblk .

public: static initonly System::Reflection::Emit::OpCode Unaligned;
public static readonly System.Reflection.Emit.OpCode Unaligned;
 staticval mutable Unaligned : System.Reflection.Emit.OpCode
Public Shared ReadOnly Unaligned As OpCode 

Nilai Bidang

Keterangan

Tabel berikut mencantumkan format rakitan heksadesimal dan Microsoft Intermediate Language (MSIL) instruksi, bersama dengan ringkasan referensi singkat:

Format Format Rakitan Deskripsi
FE 12 <unsigned int8> tidak ditandatangani. alignment Menunjukkan bahwa instruksi pointer berikutnya mungkin tidak ditandatangani.

Perilaku transisi tumpukan, dalam urutan berurutan, adalah:

  1. Alamat didorong ke tumpukan.

Unalignedmenentukan bahwa alamat (penunjuk yang tidak dikelola, native int) pada tumpukan mungkin tidak diratakan ke ukuran alami dari instruksi segera setelah ldind, , stind, stfldldfld, ldobj, stobj, initblk, atau cpblk . Artinya, untuk Ldind_I4 instruksi penyelarasan alamat mungkin tidak ke batas 4-byte. Untuk initblk dan cpblk perataan default tergantung pada arsitektur (4-byte pada CPU 32-bit, 8-byte pada CPU 64-bit). Generator kode yang tidak membatasi outputnya ke ukuran kata 32-bit harus digunakan unaligned jika penyelarasan tidak diketahui pada waktu kompilasi menjadi 8-byte.

Nilai perataan harus 1, 2, atau 4 dan berarti bahwa kode yang dihasilkan harus mengasumsikan bahwa alamat tersebut masing-masing adalah byte, byte ganda, atau quad-byte yang selaras. Perhatikan bahwa penunjuk sementara (jenis *) selalu diratakan.

Meskipun penyelarasan untuk cpblk instruksi akan secara logis memerlukan dua angka (satu untuk sumber dan satu untuk tujuan), tidak ada dampak nyata pada performa jika hanya angka yang lebih rendah yang ditentukan.

unaligned Awalan dan volatile dapat digabungkan dalam kedua urutan. Mereka harus segera mendahului ldindinstruksi , , ldfldstind, stfld, ldobjstobj, initblk, atau cpblk . Hanya awalan Volatile yang diizinkan untuk Ldsfld instruksi dan Stsfld .

Metode overload berikut Emit dapat menggunakan unaligned opcode:

Berlaku untuk