SORU
13 EKİM 2008, PAZARTESİ


Bir C dizi program aracılığıyla boyutunu belirlemek için herhangi bir yolu var mı? Ve eğer, neden olmasın?

Benzer bir soruya ilham kaynağı oldu bu soru: How does delete[] “know” the size of the operand array?

Benim sorum biraz farklıBir C dizi program aracılığıyla boyutunu belirlemek için herhangi bir yolu var mı? Ve eğer, neden olmasın?Bir dizi alır gördüğüm her fonksiyonu da boyutunu vermek için bir tamsayı parametre gerektiriyor. Ama bağlantılı soru işaret, delete[] bellek boyutu ayırmanın bilmek gerekir.

Düşünün bu C kodu:

int* arr = new int[256];
printf("Size of arr: %d\n", sizeof(arr));

Bu baskılar "Size of arr: 4 sadece işaretçi boyutu.", 256, ama bir C olduğunu sanmıyorum yazdıran bazı işlevi olması güzel olurdu . (Tekrar, sorunun bir parçası yok olmasıdır.)

AçıklamaBiliyorum ki eğer ben ilan dizisinde yığını yerine öbek (yani "int arr[256];") sizeof operatör döndürecektir 1024 (dizi uzunluğu * boyutu(int)).

CEVAP
13 EKİM 2008, PAZARTESİ


delete [] ayrılmış olan boyutunu biliyor. Ancak, bu Bilgi işletim sistemi bellek yöneticisi olarak çalışma zamanı veya derleme sırasında derleyici için mevcut değil, yani yaşıyor. Ve sizeof() gerçek bir işlev değil, aslında derleme sırasında ismi bilinmiyor dinamik olarak tahsis edilen diziler için yapamaz bir şey derleyici tarafından sürekli değerlendirilir.

Ayrıca, bu örneği ele alalım


int *arr = new int[256];
int *p = &arr[100];
printf("Size: %d\n", sizeof(p));

Nasıl derleyici p boyutu nedir biliyor musun? Sorunun kökü "" C C . diziler gerçek vardır. Orada sadece işaretçileri, ve orada hiçbir şekilde için derleyici ya da programın kendisi bilmek ister bir işaretçi puan başına bir yığın ayrılan bellek new veya tek bir nesne ya da yerin ortasında bir yığın ayrılan bellek new.

Bunun bir nedeni, C ve C çöp toplama yok, niye bu hangi işletim sistemi için programcı ve bellek yönetimi bırakın. new delete C uygulama çok farklı şekillerde kendi belleği yönetmek olabilir hangi platformları üzerinde kullanılmak üzere tasarlanmıştır çünkü C standardının bir parçası değildir. Olabilir mümkün için izin C takibini yapmak, ayrılmış diziler ve onların boyutları eğer yazılı bir kelime işlemci için bir windows kutusu çalışan en son Intel İŞLEMCİ, ama olabilir tamamen olanaksız olduğunda yazma, gömülü bir sistem üzerinde çalışan bir DSP.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrey Menshikov

    Andrey Mensh

    28 Ocak 2012
  • chrmoe

    chrmoe

    7 Kasım 2006
  • The Pet Collective

    The Pet Coll

    5 Ocak 2012