Bir fizik simülasyonu geliştiriyorum ve programlamaya yeni başladığım için, büyük programlar (çoğunlukla bellek sorunları) üretirken sorunla karşılaşıyorum. Dinamik bellek ayırma ve silme (yeni / silme, vb.) Hakkında bilgim var, ancak programı nasıl yapılandırdığım konusunda daha iyi bir yaklaşıma ihtiyacım var.
Diyelim ki çok büyük bir örnekleme oranıyla birkaç gün süren bir deneyi simüle ediyorum. Bir milyar örneği simüle etmem ve onların üzerinden geçmem gerekiyor.
Süper basitleştirilmiş bir versiyon olarak, bir programın V [i] voltajlarını aldığını ve bunları beşte topladığını söyleyeceğiz:
yani NewV [0] = V [0] + V [1] + V [2] + V [3] + V [4]
sonra NewV [1] = V [1] + V [2] + V [3] + V [4] + V [5]
sonra NewV [2] = V [2] + V [3] + V [4] + V [5] + V [6] ... ve bu bir milyar örnek için devam ediyor.
Sonunda, V [0], V [1], ..., V [1000000000] olacaktı, bunun yerine bir sonraki adım için saklamam gereken tek şey son 5 V [i] s.
Belleğin tekrar kullanılabilmesi için dizinin bir bölümünü nasıl silebilirim / yeniden konumlandırabilirim (örneğin artık ihtiyaç duyulmadığı örneğin ilk bölümünden sonra V [0] deyin)? Böyle bir programın nasıl yapılandırılacağına alternatifler var mı?
Malloc / free hakkında duydum, ancak C ++ 'da kullanılmamaları gerektiğini ve daha iyi alternatifler olduğunu duydum.
Çok teşekkürler!
TLDR; dizilerin bölümleriyle (tek tek öğeler) ne yapmam gerekiyor ki artık çok fazla bellek kaplıyor?
V
yeni bir dizi yerine saklayabilirsiniz . Temel olarak, ancak, sorunun ya algoritmalarınızda ya da veri yapılarınızda olduğunu düşünüyorum ve herhangi bir ayrıntıya sahip olmadığımızdan, bunu nasıl verimli bir şekilde yapacağınızı bilmek zor.