İnt i arasındaki fark nedir; i = 10; ve int * pi = (int *) malloc (sizeof (int))); * pi = 10; ana fonksiyon içinde yazıldığında? Her ikisi de aynı şekilde mi çalışıyor? Biri diğerinden daha hızlı mı? Ve neden?


cevap 1:

(int *) malloc ((int) boyutu) yığından bir tamsayıyı saklamak için istenen hafızayı tahsis eder ve bu tamsayının tahsis edilen alanının ilk baytına işaret eden bir işaretçi pi döndürür. pi, malloc () fonksiyonunun döndürülen göstergesidir. Bu tamsayının adresidir. * Pi = 10; tamsayı işaretçisi pi anlamına gelir. pi değeri 10'dur. pi, 10'un adresidir. * pi, pi'nin işaret ettiği değerdir.

Ana işlev içinde, int i yığın belleğinde bildirilir, yani yığına itilir ve yani kaldırılır. ana işlev çıkar çıkmaz yığını attı. Bilgisayar belleği sizin için otomatik olarak yönetir.

Bununla birlikte, malloc'da, tamsayı 10 için tahsis edilen boşluğun bellek adresi pi değişkeni içinde depolanır ve pi, yığına bildirilir.

İşlev dönmeden önce, belleği ayırmak için free () öğesini kullanmanız gerekir, aksi takdirde bellek sızıntısı olur.

Yığın işlemi, yığın işleminden daha yavaştır. Öbek üzerindeki belleğe erişmek için işaretçiyi kullanmanız gerektiğinden ve diğer işlemlerin ihtiyacınız olmayan bu belleği kullanmasına izin vermek için belleği kendiniz ayırmanız gerekir. Bu özel örnekte, yığın işlemi daha kolay ve daha hızlı olduğu için bir tamsayı için bellek ayırmanıza gerek yoktur.


cevap 2:

İlk int i; i = 10; yığına ayrılır.

Bu, boyutunun sabit olduğu ve program kapandığında kapladığı bellek alanının boşaltılacağı anlamına gelir.

Diğer yandan, ikincisi int * pi = (int *) malloc (sizeof (int))); * pi = 10; öbek üzerinde tahsis edilir.

Bu, program çalışırken dinamik olarak yapıldığı anlamına gelir. Bu nedenle, ilk gibi statik ve sabit değildir, ancak değişkene adanmış bellek alanını istediğiniz gibi düzenleyebilir ve istediğiniz zaman serbest bırakabilirsiniz.

Yığındaki değişkenler yalnızca bunları oluşturan program tarafından kullanılabilirken, öbek üzerindeki değişkenlere başka bir işlemle erişilebilir, yalnızca işaretçinin bellek adresine ihtiyacınız vardır (bunu elde edebilirsiniz)

Bununla birlikte, bellek otomatik olarak boşaltılmaz, bu yüzden bunu unutursanız veya programınız çökerse, RAM'in bu kısmını tekrar kullanmak için sadece iki seçeneğiniz vardır:

  1. Bu adresi serbest bırakabilecek bir program bulun veya oluşturun

cevap 3:

İlk int i; i = 10; yığına ayrılır.

Bu, boyutunun sabit olduğu ve program kapandığında kapladığı bellek alanının boşaltılacağı anlamına gelir.

Diğer yandan, ikincisi int * pi = (int *) malloc (sizeof (int))); * pi = 10; öbek üzerinde tahsis edilir.

Bu, program çalışırken dinamik olarak yapıldığı anlamına gelir. Bu nedenle, ilk gibi statik ve sabit değildir, ancak değişkene adanmış bellek alanını istediğiniz gibi düzenleyebilir ve istediğiniz zaman serbest bırakabilirsiniz.

Yığındaki değişkenler yalnızca bunları oluşturan program tarafından kullanılabilirken, öbek üzerindeki değişkenlere başka bir işlemle erişilebilir, yalnızca işaretçinin bellek adresine ihtiyacınız vardır (bunu elde edebilirsiniz)

Bununla birlikte, bellek otomatik olarak boşaltılmaz, bu yüzden bunu unutursanız veya programınız çökerse, RAM'in bu kısmını tekrar kullanmak için sadece iki seçeneğiniz vardır:

  1. Bu adresi serbest bırakabilecek bir program bulun veya oluşturun

cevap 4:

İlk int i; i = 10; yığına ayrılır.

Bu, boyutunun sabit olduğu ve program kapandığında kapladığı bellek alanının boşaltılacağı anlamına gelir.

Diğer yandan, ikincisi int * pi = (int *) malloc (sizeof (int))); * pi = 10; öbek üzerinde tahsis edilir.

Bu, program çalışırken dinamik olarak yapıldığı anlamına gelir. Bu nedenle, ilk gibi statik ve sabit değildir, ancak değişkene adanmış bellek alanını istediğiniz gibi düzenleyebilir ve istediğiniz zaman serbest bırakabilirsiniz.

Yığındaki değişkenler yalnızca bunları oluşturan program tarafından kullanılabilirken, öbek üzerindeki değişkenlere başka bir işlemle erişilebilir, yalnızca işaretçinin bellek adresine ihtiyacınız vardır (bunu elde edebilirsiniz)

Bununla birlikte, bellek otomatik olarak boşaltılmaz, bu yüzden bunu unutursanız veya programınız çökerse, RAM'in bu kısmını tekrar kullanmak için sadece iki seçeneğiniz vardır:

  1. Bu adresi serbest bırakabilecek bir program bulun veya oluşturun

cevap 5:

İlk int i; i = 10; yığına ayrılır.

Bu, boyutunun sabit olduğu ve program kapandığında kapladığı bellek alanının boşaltılacağı anlamına gelir.

Diğer yandan, ikincisi int * pi = (int *) malloc (sizeof (int))); * pi = 10; öbek üzerinde tahsis edilir.

Bu, program çalışırken dinamik olarak yapıldığı anlamına gelir. Bu nedenle, ilk gibi statik ve sabit değildir, ancak değişkene adanmış bellek alanını istediğiniz gibi düzenleyebilir ve istediğiniz zaman serbest bırakabilirsiniz.

Yığındaki değişkenler yalnızca bunları oluşturan program tarafından kullanılabilirken, öbek üzerindeki değişkenlere başka bir işlemle erişilebilir, yalnızca işaretçinin bellek adresine ihtiyacınız vardır (bunu elde edebilirsiniz)

Bununla birlikte, bellek otomatik olarak boşaltılmaz, bu yüzden bunu unutursanız veya programınız çökerse, RAM'in bu kısmını tekrar kullanmak için sadece iki seçeneğiniz vardır:

  1. Bu adresi serbest bırakabilecek bir program bulun veya oluşturun

cevap 6:

İlk int i; i = 10; yığına ayrılır.

Bu, boyutunun sabit olduğu ve program kapandığında kapladığı bellek alanının boşaltılacağı anlamına gelir.

Diğer yandan, ikincisi int * pi = (int *) malloc (sizeof (int))); * pi = 10; öbek üzerinde tahsis edilir.

Bu, program çalışırken dinamik olarak yapıldığı anlamına gelir. Bu nedenle, ilk gibi statik ve sabit değildir, ancak değişkene adanmış bellek alanını istediğiniz gibi düzenleyebilir ve istediğiniz zaman serbest bırakabilirsiniz.

Yığındaki değişkenler yalnızca bunları oluşturan program tarafından kullanılabilirken, öbek üzerindeki değişkenlere başka bir işlemle erişilebilir, yalnızca işaretçinin bellek adresine ihtiyacınız vardır (bunu elde edebilirsiniz)

Bununla birlikte, bellek otomatik olarak boşaltılmaz, bu yüzden bunu unutursanız veya programınız çökerse, RAM'in bu kısmını tekrar kullanmak için sadece iki seçeneğiniz vardır:

  1. Bu adresi serbest bırakabilecek bir program bulun veya oluşturun

cevap 7:

İlk int i; i = 10; yığına ayrılır.

Bu, boyutunun sabit olduğu ve program kapandığında kapladığı bellek alanının boşaltılacağı anlamına gelir.

Diğer yandan, ikincisi int * pi = (int *) malloc (sizeof (int))); * pi = 10; öbek üzerinde tahsis edilir.

Bu, program çalışırken dinamik olarak yapıldığı anlamına gelir. Bu nedenle, ilk gibi statik ve sabit değildir, ancak değişkene adanmış bellek alanını istediğiniz gibi düzenleyebilir ve istediğiniz zaman serbest bırakabilirsiniz.

Yığındaki değişkenler yalnızca bunları oluşturan program tarafından kullanılabilirken, öbek üzerindeki değişkenlere başka bir işlemle erişilebilir, yalnızca işaretçinin bellek adresine ihtiyacınız vardır (bunu elde edebilirsiniz)

Bununla birlikte, bellek otomatik olarak boşaltılmaz, bu yüzden bunu unutursanız veya programınız çökerse, RAM'in bu kısmını tekrar kullanmak için sadece iki seçeneğiniz vardır:

  1. Bu adresi serbest bırakabilecek bir program bulun veya oluşturun