Diziler (RPC)
Performans özelliklerine göre, öncelikle dizinin blok kopyalanıp kopyalanamayacağına bağlı olarak çeşitli dizi kategorileri tanımlanmıştır.
Sabit boyutlu dizi gibi bazı kategoriler için iki tür dizi tanımlayıcısı vardır; bunlar, öndeki FC belirtecinin adında bir in-fix ile gösterilir.
Karakter biçimlendir | Açıklama |
---|---|
SM | Türün toplam boyutu 16 bit işaretsiz bir int ile gösterilebilir. |
LG | Türün toplam boyutunun gösterilmesi için 32 bit işaretsiz uzun olması gerekir. |
Diziler için ortak alanlar:
total_size
Bellekteki dizinin bayt cinsinden toplam boyutu. Bu, hizalamadan sonra kablo boyutuyla aynıdır. Toplam boyut, doldurma sorununun mevcut olmadığı ve boyutun gerçek dizi boyutu olduğu kategoriler için hesaplanır.
element_size
Doldurma da dahil olmak üzere dizinin tek bir öğesinin belleğindeki toplam boyut (bu yalnızca karmaşık diziler için olabilir).
element_description
Dizi öğesi türünün açıklaması.
pointer_layout
Daha fazla bilgi için İşaretçi Düzeni konusuna bakın.
Sabit boyutlu Diziler
Bilinen bir boyuta sahip diziler için sabit boyutlu bir dizi biçimi dizesi oluşturulur ve bu nedenle sıralama arabelleğine blok kopyalanabilir. İki sabit dizi tanımlayıcı biçimi aşağıdaki gibidir.
FC_SMFARRAY alignment<1>
total_size<2>
[pointer_layout<>]
element_description<>
FC_END
ve
FC_LGFARRAY alignment<1>
total_size<4>
[pointer_layout<>]
element_description<>
FC_END
Uyumlu Dizi
Uyumlu bir dizi, dizinin boyutu bilindikten sonra blok kopyalanabilir.
FC_CARRAY alignment<1>
element_size<2>
conformance_description<>
[pointer_layout<>]
element_description<>
FC_END
conformance_description<> bir bağıntı tanımlayıcısıdır ve /strong kullanılıp kullanılmadığına bağlı olarak 4 veya 6 bayttır.
Uyumlu Değişen Dizi
Uyumlu ve değişken bir dizi de blok kopyalanabilir.
FC_CVARRAY alignment<1>
element_size<2>
conformance_description<>
variance_description<>
[pointer_layout<>]
element_description<>
FC_END
conformance_description<> ve variance_description<> bir bağıntı tanımlayıcısıdır ve /strong kullanılıp kullanılmadığına bağlı olarak 4 veya 6 bayttır.
Değişen Dizi
Değişen dizilerin, dizinin boyutuna bağlı olarak iki olasılığı vardır.
FC_SMVARRAY alignment<1>
total_size<2>
number_elements<2>
element_size<2>
variance_description<>
[pointer_layout<>]
element_description<>
FC_END
FC_LGVARRAY alignment<1>
total_size<4>
number_elements<4>
element_size<2>
variance_description<4>
[pointer_layout<>]
element_description<>
FC_END
variance_description<> bir bağıntı tanımlayıcısıdır ve kullanılan /strong bağlı olarak 4 veya 6 bayttır.
Bir yapının içine katıştırılmış çeşitli diziler için, variance_description<> 2><uzaklık, değişen dizinin yapıdaki konumundan alanı açıklayan varyansa göre uzaklıktır. Uzaklık genellikle yapının başlangıcına göredir.
Karmaşık Diziler
Karmaşık dizi, blok kopyalanmasını engelleyen bir öğeye sahip herhangi bir dizidir ve bu nedenle ek eylem yapılması gerekir. Bu öğeler bir diziyi karmaşık hale getirir:
- basit türler: ENUM16, __INT3264 (yalnızca 64 bit platformlarda), [aralığı] içeren bir integral
- başvuru ve arabirim işaretçileri (64 bit platformlardaki tüm işaretçiler)
- Sendika
- karmaşık yapılar (bir yapının karmaşık olmasının nedenlerinin tam listesi için Karmaşık Yapı Açıklaması konusuna bakın)
- [transmit_as], [user_marshal] ile tanımlanan öğeler
- En az bir uyumlu ve/veya değişen boyuta sahip çok boyutlu dizilerin tümü, temel öğe türünden bağımsız olarak karmaşıktır.
Karmaşık dizi açıklaması aşağıdaki gibidir:
FC_BOGUS_ARRAY alignment<1>
number_of_elements<2>
conformance_description<>
variance_description<>
element_description<>
FC_END
Dizi uyumluysa number_of_elements<2> alanı sıfırdır.
conformance_description<> ve variance_description<> bir bağıntı tanımlayıcısıdır ve /strong kullanılıp kullanılmadığına bağlı olarak 4 veya 6 bayttır. Dizinin uyumluluğu ve/veya varyansı varsa, conformance_description<> ve/veya variance_description<> alanları geçerli açıklamalara sahiptir; aksi takdirde bağıntı tanımlayıcısının ilk 4 bayt değeri 0xFFFFFFFF olarak ayarlanır. Bayraklar mevcut olduğunda sıfır olarak ayarlanır.