0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
1

Грамотное использование кучи

19.10.2012, 15:42. Показов 1941. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
искал но не нашел. ни здесь, ни где бы то ни было.

вкратце:

есть функция

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
unsigned char **SubBytes(unsigned char **var)
{
  int l,r;
  unsigned char **res = new unsigned char *[N];
  for (int i = 0; i < N; i++)
    res[i] = new unsigned char [N];
  
  for(int i = 0; i < N; i++)
  {
    for(int j = 0; j < N; j++)
    {
      l = (var[i][j] >> 4) & 0xf;
      r = var[i][j] & 0xf;
      res[i][j] = sbox[l][r];
    }
  }
  return res;
}
все бы ничего, но когда у меня цикл порядка 100 000 операций, вылазит вполне очевидная вещь.

смотрю в сторону std::vector, но хотелось бы спросить совета.
Миниатюры
Грамотное использование кучи  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2012, 15:42
Ответы с готовыми решениями:

Грамотное использование конструктора копирования
Всем добрый вечер. Есть класс list(двухсвязный). Задача гласит: Сгенерировать некоторую...

Получать различные начала кучи при создании кучи внутри цикла
Можно ли как-то такое провернуть, чтобы на каждой итерации цикла получались различные адреса...

Грамотное построение программы
День добрый! Не подскажите какую-нибудь литературу на тему грамотного построения программы,...

Грамотное распределение потоков и памяти
Пока только изучаю потоки и есть этот код: #include &lt;mutex&gt; #include &lt;thread&gt; #include...

21
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.10.2012, 15:55 2
Опиши словами, что тебе нужно, по графику это не очевидно.
0
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 16:08  [ТС] 3
в функции объявлен динамический массив. затем его необходимо возвратить, поэтому возможности освободить занимаемый участок памяти нет. в результате, при многократном обращении к функции, память заполняется до краев.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2012, 16:35 4
Цитата Сообщение от quizzee Посмотреть сообщение
затем его необходимо возвратить
Дальше с ним что? Нужен до конца программы?
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.10.2012, 16:39 5
Цитата Сообщение от quizzee Посмотреть сообщение
в функции объявлен динамический массив. затем его необходимо возвратить, поэтому возможности освободить занимаемый участок памяти нет. в результате, при многократном обращении к функции, память заполняется до краев.
Значит тебе нужно столько памяти. Не факт только, что физической оперативной. Что тебе нужно? Разрешить системе свопить динамическую память твоей прилады? Или подключить свои файлы аля своя подкачка?
0
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 16:44  [ТС] 6
alsav22, нет, используется как буфер внутри конкретной функции. вот только дело в том что мне эту функцию в цикле нужно использовать
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
19.10.2012, 16:45 7
Цитата Сообщение от quizzee Посмотреть сообщение
поэтому возможности освободить занимаемый участок памяти нет
врешь, можно.
0
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 16:47  [ТС] 8
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
врешь, можно.
в этой же функции?)
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.10.2012, 16:50 9
Цитата Сообщение от quizzee Посмотреть сообщение
alsav22, нет, используется как буфер внутри конкретной функции. вот только дело в том что мне эту функцию в цикле нужно использовать
А с какой стати буфера стали выдаваться наружу?
0
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 16:56  [ТС] 10
Цитата Сообщение от taras atavin Посмотреть сообщение
Что тебе нужно? Разрешить системе свопить динамическую память твоей прилады? Или подключить свои файлы аля своя подкачка?
да при чем здесь подкачка мне необходимо осовободить занимаемую память, вот только я понятию не имею где это сделать

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
А с какой стати буфера стали выдаваться наружу?
образно говоря буфер. память нужна чтобы туда вложить и оттуда возвратить - всё
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2012, 17:00 11
Если в цикле, почему нельзя освобождать память после каждой итерации? Указатель же на неё сохраняется после выхода из функции? По куску кода трудно советовать.
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
19.10.2012, 17:03 12
ну судя по коду, есть еще один двумерный массив var
Может все-таки при обращении к его элементам каждый раз производить расчет
C++
1
2
3
      l = (var[i][j] >> 4) & 0xf;
      r = var[i][j] & 0xf;
      res[i][j] = sbox[l][r];
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.10.2012, 17:11 13
Цитата Сообщение от quizzee Посмотреть сообщение
вот только я понятию не имею где это сделать
Как только станет не нужна.

Добавлено через 2 минуты
Цитата Сообщение от quizzee Посмотреть сообщение
образно говоря буфер. память нужна чтобы туда вложить и оттуда возвратить - всё
Временно положить, потом взять? Это не образ. Но такую память не выдают наружу из той функции, где она используется. А после использования удаляют.

Добавлено через 12 секунд
Цитата Сообщение от quizzee Посмотреть сообщение
образно говоря буфер. память нужна чтобы туда вложить и оттуда возвратить - всё
Временно положить, потом взять? Это не образ. Но такую память не выдают наружу из той функции, где она используется. А после использования удаляют.
0
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 17:15  [ТС] 14
Цитата Сообщение от taras atavin Посмотреть сообщение
Но такую память не выдают наружу из той функции, где она используется.
а что же мне в таком случае возвращать?
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
19.10.2012, 17:17 15
Цитата Сообщение от quizzee Посмотреть сообщение
Сообщение от taras atavin Посмотреть сообщение
Но такую память не выдают наружу из той функции, где она используется.
а что же мне в таком случае возвращать?
Имеется ввиду, что память удаляется в той же функции, где и выделяется. Соответственно в той же функции и необходимо обрабатывать эту память.
0
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 17:19  [ТС] 16
Цитата Сообщение от alsav22 Посмотреть сообщение
Если в цикле, почему нельзя освобождать память после каждой итерации?
так ведь мне в дальнейшем результат функции нужно записать уже по другому адресу

Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
Соответственно в той же функции и необходимо обрабатывать эту память.
мне эту память нужно использовать непосредственно как возвращаемое значение функции
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.10.2012, 17:23 17
С какой стати буфера стали выдаваться наружу?
0
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 17:40  [ТС] 18
Цитата Сообщение от taras atavin Посмотреть сообщение
С какой стати буфера стали выдаваться наружу?
но мне ведь надо вернуть двумерный массив.
как же я верну не указатель??
0
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 17:42  [ТС] 19
может это я крайне криво мыслю)
вот реализация
Вложения
Тип файла: zip Архив ZIP - WinRAR.zip (1.7 Кб, 7 просмотров)
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
19.10.2012, 20:11 20
Цитата Сообщение от quizzee Посмотреть сообщение
в этой же функции?)
вне этой функции, когда он больше не нужен.
0
19.10.2012, 20:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2012, 20:11
Помогаю со студенческими работами здесь

Упрощение, более грамотное написание условия
Доброе время суток! Написал условие: if (v.Type==&quot;avi&quot;||v.Type==&quot;mkv&quot;||v.Type ==&quot;mov&quot;||v.Type...

Как сделать грамотное обращение к текстурам?
Пишу на SDL 2. Есть массив блоков на весь экран, блоки 8 на 8 пикселей (рисую двойным циклом)....

Необходимо грамотное отсечение столбцов и строк двумерного массива!
Начинаю программировать на С++. Необходимо отсечь строки и столбцы двумерного массива. Если это...

Повреждение кучи
#ifndef _TASK2_H_ #define _TASK2_H_ #include &lt;iostream&gt; using namespace std; namespace...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru