SORU
24 AĞUSTOS 2008, Pazar


C Bellek Yönetimi

Hep C bellek nasıl yönettiğiniz çok dikkat etmen gereken şey duydum. Ve ben hala başına öğrenmek C, ama şimdiye kadar, ben yapmak zorunda herhangi bir bellek yönetimi ile ilgili faaliyetler hiç.. ben hep hayal olması için serbest değişkenler ve her türlü çirkin şeyler. Ama bu durum görünmüyor.

Biri bana (kod örnekleri ile) bu işi yapmak zorunda istediğiniz bir örneği, "hafıza yönetimi" mi ?

CEVAP
24 AĞUSTOS 2008, Pazar


Değişkenler bellekte konabilir bir iki yer var. Böyle bir değişken oluşturduğunuzda

int  a;
char c;
char d[16];

Değişkenler oluşturulur "yığın". Yığın değişkenleri otomatik olarak kapsam (kod artık onlara ulaşamıyorum ne zaman) dışarıda serbest. Onlara "ama bu moda. düştü" değişkenleri, otomatik denilen duyabilirsiniz

Çok acemi örnekler sadece değişkenleri yığını kullanır.

Yığın güzel çünkü otomatik, ama aynı zamanda iki dezavantajı vardır: (1) derleyici bilmen gereken birşey var önceden ne kadar büyük değişkenler ve (b) yığın alanı biraz sınırlı. Örneğin: Microsoft linker için varsayılan ayarlar altında Windows, yığın 1 MB olarak ayarlanmıştır ve tüm değişkenler için kullanılabilir.

Eğer dizinizi nasıl, ya da eğer büyük bir dizi ya da bir yapı gerekiyorsa derleme zamanında tanımıyorsun bile, "B planı".

Plan B " deniryığın". Genellikle değişkenleri İşletim Sistemi buna izin verecek kadar büyük oluşturabilirsiniz, ama bunu Kendin yapmak zorundasın. Önceki ilanları diğer yolu vardır, ancak bunu yapmak için tek bir yol gösterdi:

int size;
// ...
// Set size to some value, based on information available at run-time. Then:
// ...
char *p = (char *)malloc(size);

(Yığın değişkenleri doğrudan, ama işaretçileri ile manipüle unutmayın)

Bir yığın değişken oluşturduğunuzda, bu sorun, derleyici bitince söyleyemem, otomatik serbest kaybedersiniz. "Serbest bahsettiğiniz" geliyor. manuel nerede Kodunuzu şimdi değişken artık gerekli değildir, karar vermek için gerekli bellek başka amaçlar için alınabilir böylece bırakın. Bu durumda yukarıda.

free(p);

"Pis bir iş her zaman değişkeni artık. gerekli olduğunda, bilmek kolay değil" bu ikinci seçenek ne yapar Gerek yok ne zaman bir değişken serbest unutmak programınız için gereken daha fazla bellek kullanılmasına neden olur. Bu durum denir "". sızıntı "Bellek program sona ermeden ve OS bütün kaynaklarını kurtarır. kadar bir şey için kullanılan" sızdırılmış Hatta kötü bir problem yoksa bir yığın yanlışlıkla değişken bırakırsanız mümkündürönceaslında işi.

C ve C , yukarıda gösterildiği gibi yığın değişkenleri temizlemek için sorumlu değildir. Ancak, Java gibi diller ve ortamlar vardır .C gibi NET dilleri# bu yığın kendi başına temizlemiş olur farklı bir yaklaşım kullanın. Bu ikinci yöntem,"", geliştirici çok daha kolay ama yükü ve performans ceza ödersiniz. çöp toplama Bir denge.

(Çok detay daha basit, ama umarım daha yerle bir cevap vermek yerinde sayıp var)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BradleyWuzHere

    BradleyWuzHe

    25 NİSAN 2011
  • calicoJake

    calicoJake

    29 EKİM 2007
  • disneychannel

    disneychanne

    19 ŞUBAT 2006