February 05, 2014

Başlık pek bir şey ifade etmiyor gibi dursa da bugün bir şeyin farkına vardım belkide yeni d nin özelliğidir bilemedim ama

import std.stdio;

void main(){
	writeln(aa());
	writeln(aa.sizeof);
}

struct aa{
	ubyte typ;
	bool refcount;
	bool is_ref;
}

Kodu windows ortamında her tür için 4 bayt yani toplamda 12 bayt yer kaplıyor iken linux da toplam 3 bayt yer kaplaması çok ilginç. Şu an evimde hiç windows makine olmadığı için tekrar test edemiyorum ama d'nin align (hizalama) özelliği ile alakalı sanırsam ve windows ortamında 4 bayt hizalamanın dışına çıkamıyor veya çıkmak istemiyor.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 05, 2014

Neden farklı olduğunu bilmiyorum ama bir de .alignof var:

   writeln(aa.alignof);

Yapıların ve üyelerinin nasıl hizalandıkları da align niteliği ile belirlenebiliyor:

http://dlang.org/attribute.html#align

align(1) /* Bütün yapı nesnesi 1 bayta hizalanır */
struct aa{
align(1): /* Her üye 1 bayta hizalanır (bu durumda fark etmiyor) */
   ubyte typ;
   bool refcount;
   bool is_ref;
}

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]