SORU
16 EKİM 2008, PERŞEMBE


C ile bayt cinsinden alan büyüklüğüne alma#

Bu alanları inceleyin ve ne kadar her alan sürer sonunda rapor etmek istiyorum hangi sınıf geçiriyorum. Tüm alanları Int32, byte vs. gibi türleri vardır herhalde. Ne kadar kolay ne kadar bayt alan sürer? öğrenebilirim

Bir şeye ihtiyacım var:

Int32 a; //int a_size = a.GetSizeInBytes; // a_size should be 4

CEVAP
16 EKİM 2008, PERŞEMBE


Yok, aslında. İyi kullanıyorsun CLR sürümüne bağlı olabilir dolgusu ve işlemci vb bağlı olacaktır. Kolay çalışmak, toplam boyutu, bir nesne, farz yok başvurular için diğer nesneleri oluşturun: büyük bir dizi kullanın. GC.GetTotalMemory temel noktası, dolgu dizi başvuruları için yeni örneklerini senin yazın ve sonra Ara GetTotalMemory yine. Bir değeri diğer elinden almak ve örnek sayısını bölün. Muhtemelen tek bir örneği önceden hiçbir yeni JİTted kod numarası katkıda emin olmak için oluşturmanız gerekir. Evet, göründüğü kadar hacky ama şimdi önce iyi etki için kullandım.

Daha dün bunun için küçük bir Yardımcı Sınıf yazmak için iyi bir fikir olacağını düşündüm. Eğer ilgileniyorsanız bana bildirin.

EDİT: diğer iki öneri Var, ve ikisini de hitap etmek istiyorum.

Öncelikle, sizeof operatörü: bu sadece ne kadar bu tür soyut olarak alır gösterir, dolgu uygulanan yuvarlak ile. (Bir yapı içinde dolgu içerir, ama doldurma bir tür içinde bu türde bir değişken için uygulanır.)

Sonraki, Marshal.SizeOf: Bu sadece sıralanırken, bellekte gerçek boyutu değil sonra yönetilmeyen Boyutunu gösterir. Belgeleri açıkça belirtir:

Boyut dönen aslında. yönetilmeyen tipi boyutu. Bu ve bir boyutları yönetilmeyen yönetilen nesne farklı olabilir. Karakter için türleri, boyutu etkilenir Karakter kümesi değeri bu sınıf için geçerli.

Ve yine, dolgu bir fark yaratabilir.

Sadece doldurma ilgili olmak ne demek istediğimi açıklamak, bu iki sınıf düşünün:

class FourBytes { byte a, b, c, d; }
class FiveBytes { byte a, b, c, d, e; }

86 kutudan, FourBytes örneği 12 bayt (tüm masraflar dahil) alır. FiveBytes örneği 16 bayt alır. Tek fark, "" değişken - 4 bayt sürer? e Ne çok çeşit var. ve bir tür değil. Oldukça açıktır ki, FiveBytes tek değişken boyutu 12 bayt aşağı geri almak için kaldırmak olabilir, ama bu demek değilherdeğişken 4 bayt (hepsini kaldırmayı düşünüyorum!). Tek bir değişken maliyeti burada çok mantıklı olan bir kavram değil.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Brandon McCrary

    Brandon McCr

    15 Ocak 2012
  • efaustus9

    efaustus9

    16 HAZİRAN 2006
  • GoogleTechTalks

    GoogleTechTa

    15 AĞUSTOS 2007