From: Emre Turkay (emreturkay.tr@gmail.com)
Date: Thu 18 Jan 2007 - 22:04:31 GMT
Merhaba,
- malloc() ile heap'de yer acar, gerektiginde bunu realloc() ile
buyutebilirsin. Soyle ki;
char* arr = (char*) malloc(100); /* 100 byte'lik hafiza allocate
ettik */
// ...
arr = (char*) realloc(arr, 1000); /* arr icin ayrilan alani 1000
byte'a buyuttu. */
// ...
free(arr);
- Eger C++ kullanma ozgurlugun varsa std::vector<> kullanabilirsin ki,
bu hem daha guvenli, hem daha kolay olacaktir. Performans olarak da
array ile ayni performans'i verir.
std::vector<char> v(100); // 100 byte'lik alan ayirir.
v.reserve(1000); // 1000 byte'a cikarir.
// free'ye gerek yok.
- Ancak bunlarin her ikisinde de realloc() kullanilir ki realloc()
performans acisindan (ozellikle) buyuk veri miktarlari icin biraz
pahalidir. Eger ufak deneme amacli bir program yapmiyorsan hafizayi
blok blok allocate edip, bunlarin baslangic adreslerini de bir linked
list'te tutmalisin. C ornegi biraz uzun, c++ ornegini veriyorum:
static const unsigned int block_size = 1024; // 1 K'lik bloklar
list< vector<char>* > buffer;
void increase_buffer()
{
buffer.push_back(new vector<char>(block_size));
}
gibi.
Iyi calismalar,
Emre Turkay
On Thu, Jan 18, 2007 at 09:12:21AM +0200, Ãœmit CAN wrote:
> Aslında yapmak istediğim bir data dan okuduğum verileri bir
> değiskene atabilmek ama bu datanın büyüklüğü
> farklı boyutlarda olucak her zaman standart bir size ı yok.Data
> 10 byte ta olablir 100000 byte ta olablir.Ben değişkeni çok
> büyük tanımlayıp yaptığım programı
> şişrmek istemiyorum.Datayı okuduktan sonra gelen
> bufferın size ına göre değikenin size
> ınıda ona göre büyütmek istiyorum.büyümezse eğer program
> patlıyor.Bu şekilde bir problemim var sizce nasıl bir yol
> izleyebilirim?
>
> > 17.01.2007 tarihinde Ãœmit CAN <umit@dominant.com.tr> yazmy?:
> >>
> >> marhaba arkda?lar;
> >>
> >> #include <stdio.h>
> >> #include <curses.h>
> >> #include <signal.h>
> >> #include <string.h>
> >>
> >> char degiskenim[1];
> >> char arrayim[1][50];
> >>
> >> main
> >> {
> >> degiskenim[100];
> >> arrayim[100][50];
> >> }
> >>
> >>
> >> seklinde bi de?i?ken tanymlamasy sizce bana ilerde nasyl bir problem
> >> çykartyr? veya bir problem çykartyrmy?
> >>
> >> ?imdiden te?ekkürler ...
> >>
> >> _______________________________________________
> >> Linux-programlama mailing list
> >> Linux-programlama@liste.linux.org.tr
> >> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
> >>
> >
> >
> > diziler ile çaly?acaksan ve ciddi datalar olacaksa i?in içinde, o zaman
> > sana
> > tavsiyem data structer olayyna bi göz atman. btree vs..
> > ama sadece belli yapylarda ve belli oranlary a?amayacaksa yapaca?yn
> > i?lemler
> > benim genelde kullandy?ym bi yapy var onu kullanmak güzl oluyo. orne?in
> > iki
> > fonksum ve birde global degiskenim var
> > global degisken 1024
> >
> > fonks1
> > globaldegisken value
> >
> > fonks2
> > print global degisken
> >
> > tarzy kullanym kolayly?y oluyor.
> > bu yapy mesela ftp client uygulamasy yazacaksan süper kolaylyk sa?lar :)
> > birde e?er fonks içinde degisken tanymlayacaksan ve bu fonks char* return
> > yapacaksa o zaman iceride tanymlady?yn degiskeni memset etmektense global
> > degiskene referans gecmek bence daha mantykly.
> > yani
> > gobaldegisken
> >
> > fonks1
> > yereldegisken=globaldegisken (tanimlarken)
> > return yereldegisken
> >
> > kolay gelsin...
> > _______________________________________________
> > Linux-programlama mailing list
> > Linux-programlama@liste.linux.org.tr
> > http://liste.linux.org.tr/mailman/listinfo/linux-programlama
> >
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama@liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama