VB 6 'da bir arrayin en fazla kaç elemanı olabilir ?

Başlatan magnetron, 12 Aralık 2013, 18:19:13

magnetron

merhaba forum ,

VB 6 'da bir arrayin en fazla kaç elemanı olabilir ?

65535 gibi bir limit var mı ?

teşekkür

Burak B

Bu tip şeyler sistem kaynaklarından tükettiği için sisteminizle alakalı diyebiliriz. Üstü kapalı olarak bir limit yok denebilir.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

yilmaz_kk

 array tipine, kullandığınız derleyici ve sistem kaynaklarınıza göre değişir.

olemiss

Alıntı yapılan: magnetron - 12 Aralık 2013, 18:19:13
VB 6 'da bir arrayin en fazla kaç elemanı olabilir?
Google'da çıkan ilk sonuç şuradaki soru/cevap: http://stackoverflow.com/questions/17149202/vb6-maximum-size-of-an-array

Cevaba göre array'de 2.147.483.647 öğe bulunabilir (yani 32 bit'lik bir signed integer'a sığabilecek en büyük sayı).
Yazılım Mühendisi, Çevirmen.

Burak B

Peki ya 32 bit integer değilse index :) Belki long long dur. Bu durum göreceli bir durum. Sistem kaynakları ile sınırlandırılıp sonsuzdur denebilir.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

olemiss

VB 6, 64 bit'lik Windows öncesinde gelişitirilmiş bir uygulama.  VB 6, 64 bit'lik Windows üzerinde çalışırken de 32 bit olarak çalışıyor:

The Visual Basic 6.0 family of products are designed to run on 32-bit versions of Microsoft Windows operating systems. When you run any of these programs on a 64-bit version of a Windows operating system, the program runs in the 32-bit layer of the Windows operating system known as Windows on Windows (WOW).

Buradan: http://support.microsoft.com/kb/894373/en-us

Esasında VB 6'da integer 2 byte, long integer 4 byte.  VB 6'da long long veri türü yok.

http://msdn.microsoft.com/en-us/library/aa263420%28VS.60%29.aspx

Yazılım Mühendisi, Çevirmen.

Burak B

#6
VB6 Currency(8 byte uzunluğunda -922,337,203,685,477.5808 ile 922,337,203,685,477.5807 aralığı) destekliyor. Böyle bir veri tipi var yani. Ya ben Currency tipinde seçersem ne olacak ? Varmı o kadar RAM makinede ?  Birde Decimal veri tipi var hiç girmemek lazım ona 14byte. Bu şekilde kendinizi sınırlandırmaya gerek yok. Makul ve mantıklı olmak lazım. 32 Bit zaten x86 bir PC nin adresleyebileceği en büyük değerdir(mi acaba ?). Bu nedenle dizilerin(array) bellekte yer tutan bir yapı olduğunu düşünürsek şunu söyleyebiliriz. Bilgisayarınızın boşta kalan RAM alanı kadar array tanımlayabilirsiniz. En doğrusu budur. Windows XP x86 gibi eskiyen işletim sistemleri 4GB üstünü adresleyemezken. Windows Server 2003, Enterprise Edition x86 sürümü 64GB bellek adresleyebilir. Peki ben oturup 2GB array oluşturdum ama makinede boşta 1GB RAM var ne olacak o zaman. :)
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

mufitsozen

Alıntı yapılan: ByteMaster - 13 Aralık 2013, 01:34:19
.... En doğrusu budur. Windows XP x86 gibi eskiyen işletim sistemleri 4GB üstünü adresleyemezken. Windows Server 2003, Enterprise Edition x86 sürümü 64GB bellek adresleyebilir. Peki ben oturup 2GB array oluşturdum ama makinede boşta 1GB RAM var ne olacak o zaman. :)

Butun modern isletim sistemlerinde bir dosya virtual memory'e map edilebilir(Memory-Mapped-Files)http://en.wikipedia.org/wiki/Memory-mapped_file. Dolayisi ile RAM ile sinirli degilsiniz. Buda pratik olarak sonsuz kabul edilebilir.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

Burak B

#8
Alıntı YapButun modern isletim sistemlerinde bir dosya virtual memory'e map edilebilir(Memory-Mapped-Files)http://en.wikipedia.org/wiki/Memory-mapped_file. Dolayisi ile RAM ile sinirli değilsiniz. Buda pratik olarak sonsuz kabul edilebilir.

Haklısınız üstadım bilerek pagefile ve sanal RAM olayına girmedim. Yoksa konu uzayacak. Ben basitçe sistem kaynaklarımızla alakalı olduğunu vurgulamaya çalışıyorum aslında. Birde düşünceyi sınırlara hapsetmemek gerektiğini anlatmaya. Bir flash belleği de RAM olarak kullanabiliyoruz ve bunun gibi başka örneklerde mutlaka eklenebilir.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

olemiss

Orijinal soru şu:

>VB 6 'da bir arrayin en fazla kaç elemanı olabilir ?
>65535 gibi bir limit var mı ?

Bunun cevabını kaynak göstererek verdim.  Yani aşağıdaki kodun teorik olarak mümkün olması gerek:
Option Base 1

Dim my_array(2147483647) As Byte

For i = 1 To 2147483647
    my_array(i) = 1
Next i


Evet, gerçek hayatta durum, sistemin belleği ile kısıtlı olacaktır.  Fakat ideal bir durumda yukarıdaki çözüm geçerlidir.
Yazılım Mühendisi, Çevirmen.

engerex

#10
(2 ^ 31) - 1

ZZombie

İlave olarak şunu da sormanız gerek.
Bu kadar uzun bir array ile tüm RAM i doldurabilirim, ama bu akıllıca bir iş olur mu?
Tüm RAM belleği doldurursanız ciddi bir performans kaybınız ortaya çıkar.
Tabiri caiz ise kımıldayamaz durumu getirirsiniz bilgisayarı.