Bellek ayırma ile ilgili bir sorum var. Bunun gibi bir dizi işaretçi yarattığımı varsayalım.C++ bir dizi işaretçi için bellek ayırma
int **numbers = new int *[1024*1024];
Bu (Mac 64-bit 8 bayt işaretçisi) bellek 8MB ihtiyaç düşünmekteydiler ama bu böyle değil. Hafıza sadece her bir işaretçi bir değer atandığında tahsis edilir. Yani tüm işaretçiler NULL ise, 8MB ayrıldığını görüyorum.
for(int i=0; i<1024*1024; i++)
{
numbers[i] = NULL;
}
Uygulamam, hangi tanıtıcıya bunun için bellek ayırmadan atanmış bir değere sahip olduğunu nasıl biliyor?
"Yeni" muhtemelen yalnızca adres alanını ayırıyor ve yalnızca bellek yazıldıktan sonra bellek işliyor. Bu yaygın bir optimizasyon ve işletim sistemi tarafından gerçekleştirilir. – Mankarse
Sadece karışıklık eklemek için, eğer okumak yerine, yazmak yerine, tüm işaretçiler, hepsi NULL olurdu, ama bu durumda belleğiniz yükselmeyecek, çünkü sadece sıfır sayfasını okuyor olacaksınız. ve tekrar tekrar. – Neil