Wiele lat temu, gdy tylko było to możliwe, upominano mnie, by udostępniać zasoby w odwrotnej kolejności, w jaki sposób zostały przydzielone. Czyli:C#: Czy istnieje korzyść w dysponowaniu zasobami w odwrotnej kolejności ich alokacji?
block1 = malloc(...);
block2 = malloc(...);
... do stuff ...
free(block2);
free(block1);
sobie wyobrazić na maszynie 640 KB MS-DOS, może to zminimalizować fragmentacji sterty. Czy jest jakaś praktyczna korzyść, aby to zrobić w aplikacji C# /.NET, czy jest to nawyk, który przeżył jego znaczenie?
Dobrze stworzony nie jest dobry. Musi być zależne od zlecenia, zależne od wydania i znane w wielu okolicznościach. Nie może mieć większego znaczenia we wszystkich implementacjach baz danych, transakcji i wszystkiego, co działa na stosie (większość oprogramowania tam jest). Blokady są kolejnym przykładem i stosy bibliotek nie-zewnętrznych i ubogich używają go. Operacje plików i ich blokady są inne. Incydent zdarzeń inny. Wszelkie zasoby niezarządzane w zależności od jeszcze innego. Stworzenie i zniszczenie idą w parze, a idiomu nie można łamać w kategoriach Inicjacji Zasobów-Jest- "dobrze-Stworzenie". –
Tak więc WC w oksymoronie RIIWC zastąpiono Akwizycją, co implikuje Uwolnienie btw. A ponieważ pamięć i duża ilość zasobów są w większości wyabstrahowane, ops, pojawia się pomysł ... i powstają wszelkiego rodzaju hacki. Krótko mówiąc, jest to po prostu charakter problemu i ma duże znaczenie. –
I chociaż nie bronię tutaj zależności od rzędu, prawidłowa obserwacja jest taka, że jest niezwykle istotna, ale rzadko pożądana. Ale jest to coś, do czego ekstremalne specyfikacje VM są ograniczone. Java implikuje szczególnie i CLR w mniejszym, ale wciąż znacznym stopniu. Jest to hack, aby nie łamać dużych ilości działającego kodu i przyjętych założeń, świadomej decyzji kompilatora i projektantów JIT. Kod, który jest zdolny do niezależnego od zamówienia przetwarzania, daje wiele możliwości, ale może być niemożliwy do zrealizowania w wielu scenariuszach. –