Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача TStringList по ссылке / 7 сообщений из 7, страница 1 из 1
16.07.2021, 14:46
    #40084368
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача TStringList по ссылке
Всем доброго дня,

с точки зрения операций в памяти:

procedure foo(s: Tstrings);
и
procedure foo(var s: TStrings);

одно и то же или всетаки нет?
в обоих случаях происходит передача по ссылке но.
Сегодня случайно столкнулся с одним утверждением :
xabr.... если в функцию передается переменная (а точнее экземпляр объекта) TStringList, то в данном случае произойдет передача по ссылке (даже если это не указано явно). Этот способ передачи является у большинства самым излюбленным, но в тоже время является и самым не практичным, т.к. для выполнения метода выделяется дополнительная память для создания точной копией передаваемой переменой. Для решения этой проблемы следует использовать один из способов описанных ниже.
.....


т.е. если передать с явным указанием var то этого не произойдёт?
что то тут я недопонимаю или автор что то напутал.

Спасибо
...
Рейтинг: 0 / 0
16.07.2021, 14:56
    #40084369
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача TStringList по ссылке
Для новичков обычно является большим сюрпризом то, что в Дельфи переменные типа TObject и
иже с ним - указатели. Ведь они не читают документацию о внутреннем представлении типов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.07.2021, 14:59
    #40084370
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача TStringList по ссылке
hlopotun
Всем доброго дня,

с точки зрения операций в памяти:

procedure foo(s: Tstrings);
и
procedure foo(var s: TStrings);

одно и то же или всетаки нет?
в обоих случаях происходит передача по ссылке но.
Сегодня случайно столкнулся с одним утверждением :
xabr.... если в функцию передается переменная (а точнее экземпляр объекта) TStringList, то в данном случае произойдет передача по ссылке (даже если это не указано явно). Этот способ передачи является у большинства самым излюбленным, но в тоже время является и самым не практичным, т.к. для выполнения метода выделяется дополнительная память для создания точной копией передаваемой переменой. Для решения этой проблемы следует использовать один из способов описанных ниже.
.....


т.е. если передать с явным указанием var то этого не произойдёт?
что то тут я недопонимаю или автор что то напутал.

Спасибо

Любой экземляр класса - это, по сути, ссылка ( SizeOf(MyStrings)=SizeOf(pointer)).
В случае foo(Strings:TStrings) будет создана копия этой ссылки, доп. память = 4 или 8 байт,
В случае foo(var Strings:TStrings) будет создан указатель на ссылку Strings, расход памяти такой-же.
Сам Strings не клонируется в случае foo(Strings:TStrings).
Где Вы прочли эти сведения?
...
Рейтинг: 0 / 0
16.07.2021, 15:01
    #40084371
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача TStringList по ссылке
hlopotun
что то тут я недопонимаю или автор что то напутал

Автор с текстом перемудрил. Говорит о передачи строки, отвлекается на объекты, и продолжает говорить о строке.
...
Рейтинг: 0 / 0
16.07.2021, 15:20
    #40084372
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача TStringList по ссылке
hlopotun
с точки зрения операций в памяти:

procedure foo(s: Tstrings);
и
procedure foo(var s: TStrings);

одно и то же или всетаки нет?

Нет. В первом случае передаётся указатель (значение выражения типа TStrings), а во втором - указатель на указатель (адрес переменной типа TStrings).

Однако, с точки зрения ресурсов эти случаи довольно похожи. То есть "копирования большого списка" не происходит ни там, ни там, дополнительной памяти не выделяется ни там, ни там.

hlopotun
xabr

Выкиньте неграмотный бред и учитесь сразу его закрывать. Судя по тому, как написан текст, автор сам не особо понимает происходящее.
...
Рейтинг: 0 / 0
16.07.2021, 15:45
    #40084373
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача TStringList по ссылке
на хабре одни питарасы! ©
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.07.2021, 11:02
    #40084506
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача TStringList по ссылке
Мимопроходящий
на хабре одни питарасы! ©

Не только на хабре ;)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача TStringList по ссылке / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]