Текущее время: Сб, май 03 2025, 03:57

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Внутренние таблицы и память
СообщениеДобавлено: Пт, фев 19 2021, 16:03 
Специалист
Специалист

Зарегистрирован:
Вс, янв 11 2009, 11:05
Сообщения: 152
Пол: Мужской
Добрый день, коллеги.

Вопрос такой:

- в программе объявлена глобальная внутренняя таблица GT_TAB_1
- в подпрограмме объявлена внутренняя таблица LT_TAB_2 (LT_TAB_2 like GT_TAB_1[])
- в этой подпрограмме заполняется GT_TAB_1 какими-то данными
- и затем в подпрограмме есть такой финт:

Code:
lt_tab_2 = GT_TAB_1[].
delete lt_tab_2 where что-то там
GT_TAB_1[] = lt_tab_2[].


и дальше lt_tab_2 никак не используется

В чем тут смысл дублирования таблички?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Внутренние таблицы и память
СообщениеДобавлено: Пт, фев 19 2021, 18:03 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
_garycor_ написал:
Добрый день, коллеги.

Вопрос такой:

- в программе объявлена глобальная внутренняя таблица GT_TAB_1
- в подпрограмме объявлена внутренняя таблица LT_TAB_2 (LT_TAB_2 like GT_TAB_1[])
- в этой подпрограмме заполняется GT_TAB_1 какими-то данными
- и затем в подпрограмме есть такой финт:

Code:
lt_tab_2 = GT_TAB_1[].
delete lt_tab_2 where что-то там
GT_TAB_1[] = lt_tab_2[].


и дальше lt_tab_2 никак не используется

В чем тут смысл дублирования таблички?


Возможно в сортировке, типа для ускорения удаления по ключам.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутренние таблицы и память
СообщениеДобавлено: Пт, фев 19 2021, 18:44 
Специалист
Специалист

Зарегистрирован:
Вс, янв 11 2009, 11:05
Сообщения: 152
Пол: Мужской
было от одного коллеги типа такого ответа:
"Типа память экономят. Видимо расчёт на том то при присвоении перевыделется память"
"При удалении строки, паять выделенная под строку не освобождается, просто строка помечается как отсутствущая."

правда я не понял как тут память может экономится... когда из одной таблицы сделали две. они же не на один кусок памяти ссылаться будут, а уже на два. или я что-то не понимаю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Внутренние таблицы и память
СообщениеДобавлено: Пт, фев 19 2021, 22:51 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
lt_tab_2 - локальная таблица, при выходе из подпрограммы её в памяти не станет.
Но вот поможет ли такой финт сэкономить память - не уверен.


Последний раз редактировалось LAT Сб, фев 20 2021, 00:15, всего редактировалось 2 раз(а).

Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутренние таблицы и память
СообщениеДобавлено: Пт, фев 19 2021, 23:53 
Специалист
Специалист

Зарегистрирован:
Вс, янв 11 2009, 11:05
Сообщения: 152
Пол: Мужской
LAT написал(а):
lt_tab_2 - локальная таблица, при выходе из подпрограммы её в памяти не станет.
Но вот поможет ли такой финт сэкономить память - не уверен.


при выходе из подпрограммы почистится - это понятно... но в момент lt_tab_2 = GT_TAB_1[]... какая тут экономия? но ведь так сделано было специально. просмотрел версии и такой код был с самого начала.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Внутренние таблицы и память
СообщениеДобавлено: Сб, фев 20 2021, 00:14 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
Именно в момент lt_tab_2 = GT_TAB_1[] - почти никакого расхода, lt_tab_2 будет указывать на ту же таблицу.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутренние таблицы и память
СообщениеДобавлено: Сб, фев 20 2021, 00:55 
Специалист
Специалист

Зарегистрирован:
Вс, янв 11 2009, 11:05
Сообщения: 152
Пол: Мужской
LAT написал(а):
Именно в момент lt_tab_2 = GT_TAB_1[] - почти никакого расхода, lt_tab_2 будет указывать на ту же таблицу.


в смысле это будет не копия? и если я поменяю что-то в lt_tab_2, то поменяется и в GT_TAB_1? что-то я сильно в этом сомневаюсь.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Внутренние таблицы и память
СообщениеДобавлено: Сб, фев 20 2021, 00:57 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
_garycor_ написал:
в смысле это будет не копия? и если я поменяю что-то в lt_tab_2, то поменяется и в GT_TAB_1?
Когда Вы поменяете lt_tab_2, будет создана "изменённая копия", и lt_tab_2 будет уже указывать на неё.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутренние таблицы и память
СообщениеДобавлено: Сб, фев 20 2021, 01:19 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
Судя по всему, автор рассчитывал на следующее:
Code:
FORM ...                           // 1: память под N строк GT_TAB_1
  lt_tab_2 = GT_TAB_1[].           // 2: память под N строк, lt_tab_2 указывает на ту же таблицу
  delete lt_tab_2 where что-то там // 3: память под N строк GT_TAB_1 + m строк lt_tab_2
  GT_TAB_1[] = lt_tab_2[].         // 4: память под m строк lt_tab_2, GT_TAB_1 указывает на ту же таблицу
...
ENDFORM                            // 5: память под m строк GT_TAB_1, lt_tab_2 уничтожается
Но мне всё-таки кажется, что в 3 будет: память под N строк GT_TAB_1 + N строк lt_tab_2 (m актуальных, остальные - помеченные удалёнными). Но возможно ошибаюсь, надо бы в отладке глянуть.
Насколько я знаю, такие вещи делаются так:
Code:
lt_tab_2 = GT_TAB_1[].
CLEAR: GT_TAB_1[].     // или REFRESH
LOOP AT lt_tab_2 WHERE что-то там // 6
  APPEND ... TO GT_TAB_1[].       // 7
или же вместо 6, 7:
Code:
DELETE  lt_tab_2 WHERE что-то там
LOOP AT lt_tab_2...
  APPEND ... TO GT_TAB_1[].


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутренние таблицы и память  Тема решена
СообщениеДобавлено: Вт, мар 02 2021, 17:15 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
автор кода походу ещё до команды FREE не добрался :D


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB