Yeni operatör, sürekli yığın yığın belleği ayırmayı garanti ediyor mu? YaniC++ yeni işleç - bellek düzeni
objects=(Base*)malloc(1024*sizeof(base));
veya boşluklar olabilir aynı bellek ayırma açısından
objects=new Base[1024];
mı?
Yeni operatör, sürekli yığın yığın belleği ayırmayı garanti ediyor mu? YaniC++ yeni işleç - bellek düzeni
objects=(Base*)malloc(1024*sizeof(base));
veya boşluklar olabilir aynı bellek ayırma açısından
objects=new Base[1024];
mı?
Evet, bellek sürekli olacak. Tahsisi açısından, malloc
sürümü ile aynıdır, ancak birkaç fark vardır (kurucuya yapılan çağrılar, NULL
, malloc
, istisnalar, vs. atmaz). Eğer delete
veya free
ile new[]
karıştırmak olamaz
Not Belleği boşaltmak için delete[] objects
kullanmak zorunda.
Belki de. new
operatörü iki şey yapar: operator new
işlevini çağırır; bu, tüm olası türler için uygun şekilde hizalanmış bitişik bir bellek bloğu döndürecektir (örneğin, yeni bir yanlış yerleştirilmiş yerleşim olmadığı zamanlar hariç); Daha sonra, hemen her şey hakkında yapabilecek olan nesnenin yapıcısını çağırır. İlk ile bitişik olmayacak ek bloklar tahsis dahil.
new
işleci aşırı yüklenmediyse, evet ayrılmış bellek bloğu bitişiktir. Ama aşırı yüklenirse, bunu bilemeyiz (bazı kötü programcılar aşırı yüklenebilir?: D)
Tam olarak aynı değil. 'New []' sürümü, her bir nesnede varsayılan yapıcıyı çağırır. –
@ edA-qamort-ora-y dediğim şey buydu ... –
Üzgünüm, bugün körüm. Ancak yeni versiyon dizinin büyüklüğünü hatırlamak için biraz daha fazla alan tahsis edecek, bu yüzden sil [] [] doğru sayıda destrüktörü arayabilir. Elbette uzayda küçük bir fark var. –