Текущее время: Вс, апр 28 2024, 05:11

Часовой пояс: 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
Сообщения: 347
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
Сообщения: 347
Именно в момент 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
Сообщения: 347
_garycor_ написал:
в смысле это будет не копия? и если я поменяю что-то в lt_tab_2, то поменяется и в GT_TAB_1?
Когда Вы поменяете lt_tab_2, будет создана "изменённая копия", и lt_tab_2 будет уже указывать на неё.


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

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Судя по всему, автор рассчитывал на следующее:
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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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