![]() |
![]() ![]() |
![]() |
-lukasamd- |
![]()
Post
#1
|
Goście ![]() |
Witam,
mam takie oto coś - jest sobie funkcja, która jako argument pobiera np. tablicę. W ramach działania funkcji tablica ta nie jest modyfikowana. Wiem, że w takiej sytuacji nie następuje w pamięci stworzenie kopii lokalnej tej tablicy. Teraz drugi przypadek - znowu argumentem jest tablica, ale zostaje ona w ramach funkcji zmodyfikowana. Zgodnie z kilkoma podręcznikami w takiej sytuacji tworzona jest lokalna kopia tablicy, na której to zachodzą te zmiany. Jeżeli zmiany są niewielkie to i tak zajmuje to 2x tyle pamięci co poprzednio. No i przypadek do którego mam pytanie: świadomie jako argument podajemy referencję do tablicy. Jeżeli dobrze myślę, to tu nie ma potrzeby robienia żadnej kopii, więc wszelkie zmiany z definicji są od razu zapisywane w przekazywanej tablicy globalnie. Nie zwiększamy użycia pamięci. Mam rację, czy się mylę? No i jak wygląda ta sama kwestia w wypadku obiektów? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Obiekty zawsze przekazywane są przez referencję. Jeżeli chcesz przekazać kopię musisz zrobić to jawnie:
Tak, masz rację - dopiero próba modyfikacji zmiennej lokalnej przyczyni się do faktycznego utworzenia kopii danej zmiennej (angielska nazwa kompletnie wypadła mi z głowy... lazy coś-tam) co spowoduje, że do czasu zadziałania GC w pamięci będą dwie kopie ? zużywane będzie więcej pamięci. Pamiętaj jednak o jednym - w 99% przypadków na pierwszym miejscu ma być logiczność i przejrzystość kodu, a nie zmniejszenie zużycia pamięci o 5 czy 100 KiB. Ten post edytował Crozin 18.01.2011, 18:52:20 |
|
|
-lukasamd- |
![]()
Post
#3
|
Goście ![]() |
Dzięki
![]() Co do uwagi - wiem, ale tu w grę wchodzi naprawdę spora tablica, zaś funkcja ją modyfikująca działa na zasadzie hooku i chciałem rozwiać wątpliwości ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 16:15 |