Re: [Linux-programlama] C de deişken tanımlama

---------

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

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


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

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.