MATLAB’da yeniyim, iş tanımında değildim ve şirketimin kullandığı kodu yazıp muhafaza eden kişiyi devralmaya zorlandım. Hayat zor. MATLAB'de, değişkenler olarak iletmek yerine global değişkenler bildirerek belleği korur muyum?
ben devralıyorum hangi adam
o bellekten tasarruf etmek,global
gibi tüm büyük veri vektörleri ilan söyledi. Daha spesifik olarak, bir işlev başka bir işlevi çağırdığında, veriyi geçtiğinde bir kopyasını oluşturmaz.
Bu doğru mu? Ben Strategies for Efficient Use of Memory okumak ve büyük veri kümeleri ile çalışırken denilen fonksiyon değerini değiştirmesi durumunda MATLAB bir giriş değişkeninin geçici bir kopyasını yapar
, farkında söylüyor. Bu, diziyi saklamak için gereken belleği geçici olarak ikiye katlar ve bu da yeterli bellek yoksa MATLAB'ın bir hata üretmesine neden olur.Bir işleve bir değişken geçmek
, aslında değişken temsil verilere başvuru geçiyoruz:O Memory Allocation For Array #Function Arguments içinde çok benzer bir şey söylüyor. Giriş verileri çağrılan işlev tarafından değiştirilmediği sürece, çağrılan işlevdeki değişken ve çağrılan işlevdeki değişken bellekte aynı konuma işaret eder. Çağrılan işlev giriş verilerinin değerini değiştirirse, MATLAB orijinal dizinin bir kopyasını bellekte yeni bir konuma getirir, değiştirilen değerle kopyayı günceller ve çağrılan işlevdeki giriş değişkenini bu yeni diziye işaret eder.
global
'un kullanılması daha iyi olabilir mi? Kodun hiçbiri giriş argümanını değiştirmediğinden emin olmak yerine, tüm büyük verileri global
olarak belirtmek için biraz özensiz görünüyor. Yanlış mıyım? Bu gerçekten RAM kullanımını artırıyor mu? Tecrübelerime göre
Neyin daha iyi olduğunu görmek için RAM kullanımını izlemiyorsunuz? Sorunun diğer performanslardan farklı olduğunu düşünmüyorum. Kodunuzu izlemeniz gerekiyor. İki döngüyü yazıp sanki bir global olarak veya bir işlevin girdisi olarak bir değişkenin kodunuzun girdi verilerini değiştirdiğinde daha iyi olduğunu test edersiniz (eğer bunu yaparsa, bellek sadece “iki katına çıktı”). Cevabını verdiğim için üzgünüm, ama performans önemli olduğunda çok fazla hata var. – inerte
Kesinlikle doğru, ama yine de soruyu sordum, çünkü bunun sadece hafıza değil, kodlama tarzı olduğu konusunda endişeliydim. Oh iyi ... – scraimer
Yardımcı olabilecek birkaç şey var: "profile on -memory" Matlab profilindeki tahsisi takip edecektir. Ve R2008a + kullanıyorsanız, yeni stil "tutamaç" nesneleri, bellekten tasarruf edecek ancak globals'tan daha iyi bir kapsam kontrolüne sahip olan referansa göre geçiş yapabilir. –