OpCodes.Unaligned Bidang

Definisi

Menunjukkan bahwa alamat yang saat ini berada di atas tumpukan evaluasi mungkin tidak selaras dengan ukuran alami dari instruksi segera berikut ldind, , stind, ldfldstfldldobj, stobj, , initblk, atau 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 Bahasa Perantara (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 selaras dengan ukuran alami dari instruksi segera berikut ldind, , stind, ldfldstfld, ldobj, stobj, initblk, atau cpblk . Artinya, untuk Ldind_I4 instruksi penyelarasan alamat mungkin tidak ke batas 4-byte. Untuk initblk dan cpblk perataan default adalah arsitektur tergantung (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 perataan 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 adalah byte, byte ganda, atau byte quad yang selaras, masing-masing. 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 salah satu urutan. Mereka harus segera mendahului ldindinstruksi , , stindldfld, stfldldobj, stobj, initblk, atau cpblk . Hanya awalan yang Volatile diizinkan untuk Ldsfld instruksi dan Stsfld .

Overload metode berikut Emit dapat menggunakan unaligned opcode:

Berlaku untuk