Re: [Linux-programlama] 64 bit programlama

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Serkan Kenar (serkan@ieee.metu.edu.tr)
Date: Thu 30 Nov 2006 - 17:29:09 GMT


Fuat Altun yazmış:
> Teşekkürler.
>
> Fakat "taşınabilir kod yazabilmek için
> sizeof() ve kütüphanelerinide tanımlanmış olan veri tiplerine bağlı kalın." Kısmını biraz açarsanız sevinirim. Sizeof'u kodda nasıl kullanıcam ve hangi kütüphanedeki veritipleri?

1. Bellekten yer tahsis etmek istediğinizde sizeof() operatörüyle yeri
hesaplayın.

int* i_ptr = (int*) malloc(sizeof(int));

Bu sayede farklı bir platforma geçsenizde sorun yaşamazsınız. Bu zaten
çoğunlukla uygulanan bir pratiktir.

2. Kütüphanelerinizdeki tanımlı veri tiplerinden kastettiğim ise,
standart C kütüphanesi veya c++ STL içerisinde tanımlı veri tiplerinin
kullanılması zorunluluğu.

Çoğu zaman bu veri tipleri tanımları yerine, çalışılan platformdaki
karşılıkları kullanılır. Platform değişikliklerinde kodun bu kısımları
sorun çıkarır. Örneğin "gid_t getgid(void);" şeklinde tanımlanmış olan
getgid fonksiyonu gid_t tipinde değer döner. Bunu int olarak kabul
edebilirsiniz. Çalıştığınız platformda sorun yaşamazsınız belki ama,
taşımaya çalıştığınızda sorun çıkarabilir. gid_t kullanırsanız sorun
olmayacağınız bilirsiniz.

Ayrıca uzunluğundan emin olduğunuz veri tipleri kullanmak isterseniz,
stdint.h içinde tanımlanmış olan int32_t gibi veri tiplerini
kullanabilirsiniz.

kolay gelsin,

>
> İyi çalışmalar
>
>
>
>
> -----Original Message-----
> From: linux-programlama-bounces@liste.linux.org.tr [mailto:linux-programlama-bounces@liste.linux.org.tr] On Behalf Of Serkan Kenar
> Sent: Tuesday, November 28, 2006 12:28 PM
> To: linux-programlama@liste.linux.org.tr
> Subject: Re: [Linux-programlama] 64 bit programlama
>
> Fuat Altun yazmış:
>> Merhabalar,
>>
>> 64 bitlik ortamlarda programlama yapıldiginda veri tiplerinin uzunlugu
>> degisiyormu?
>
> Değişir. Aslında veri tiplerinin uzunlukları çok da tahmin edilebilir
> değildir bu nedenle sizeof() operatörünü ve kütüphanelerde gelen veri
> tiplerini kullanmanız gerekir.
>
> Kullandığınız sistemlerde bu tiplerin boyutlarını merak ediyorsanız ufak
> bir program yazarak öğrenebilirsiniz.
>
> int main()
> {
> printf("sizeof(char)=%d\n", sizeof(char));
> printf("sizeof(int)=%d\n", sizeof(int));
> printf("sizeof(long)=%d\n", sizeof(long));
> printf("sizeof(long long)=%d\n", sizeof(long long));
> return 0;
> }
>
> 32-bit bir makinede aldığım sonuçlar:
> sizeof(char)=1
> sizeof(int)=4
> sizeof(long)=4
> sizeof(long long)=8
>
> 64-bit bir makinede aldığım sonuçlar:
> sizeof(char)=1
> sizeof(int)=4
> sizeof(long)=8
> sizeof(long long)=8
>
> Yine de dediğim gibi, bu sonuçlar bağlı çalışma yapmak yanıltıcı ve
> problemlere neden olabilir. Esas olarak taşınabilir kod yazabilmek için
> sizeof() ve kütüphanelerinide tanımlanmış olan veri tiplerine bağlı kalın.
>
> iyi çalışmalar,

--
Serkan KENAR
http://serkan.feyvi.org/blog/
_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.