С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
quizzee
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
#1

грамотное использование кучи - C++

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

искал но не нашел. ни здесь, ни где бы то ни было.

вкратце:

есть функция

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
Миниатюры
грамотное использование кучи  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2012, 15:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос грамотное использование кучи (C++):

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

Получать различные начала кучи при создании кучи внутри цикла - C++
Можно ли как-то такое провернуть, чтобы на каждой итерации цикла получались различные адреса (выбираются ОС) на начало кучи (периодические...

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

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

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

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

21
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
19.10.2012, 15:55 #2
Опиши словами, что тебе нужно, по графику это не очевидно.
0
quizzee
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 16:08  [ТС] #3
в функции объявлен динамический массив. затем его необходимо возвратить, поэтому возможности освободить занимаемый участок памяти нет. в результате, при многократном обращении к функции, память заполняется до краев.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2012, 16:35 #4
Цитата Сообщение от quizzee Посмотреть сообщение
затем его необходимо возвратить
Дальше с ним что? Нужен до конца программы?
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
19.10.2012, 16:39 #5
Цитата Сообщение от quizzee Посмотреть сообщение
в функции объявлен динамический массив. затем его необходимо возвратить, поэтому возможности освободить занимаемый участок памяти нет. в результате, при многократном обращении к функции, память заполняется до краев.
Значит тебе нужно столько памяти. Не факт только, что физической оперативной. Что тебе нужно? Разрешить системе свопить динамическую память твоей прилады? Или подключить свои файлы аля своя подкачка?
0
quizzee
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 16:44  [ТС] #6
alsav22, нет, используется как буфер внутри конкретной функции. вот только дело в том что мне эту функцию в цикле нужно использовать
0
Dmitriy_M
1363 / 1246 / 114
Регистрация: 20.03.2009
Сообщений: 4,462
Записей в блоге: 11
19.10.2012, 16:45 #7
Цитата Сообщение от quizzee Посмотреть сообщение
поэтому возможности освободить занимаемый участок памяти нет
врешь, можно.
0
quizzee
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 16:47  [ТС] #8
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
врешь, можно.
в этой же функции?)
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
19.10.2012, 16:50 #9
Цитата Сообщение от quizzee Посмотреть сообщение
alsav22, нет, используется как буфер внутри конкретной функции. вот только дело в том что мне эту функцию в цикле нужно использовать
А с какой стати буфера стали выдаваться наружу?
0
quizzee
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 16:56  [ТС] #10
Цитата Сообщение от taras atavin Посмотреть сообщение
Что тебе нужно? Разрешить системе свопить динамическую память твоей прилады? Или подключить свои файлы аля своя подкачка?
да при чем здесь подкачка мне необходимо осовободить занимаемую память, вот только я понятию не имею где это сделать

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
А с какой стати буфера стали выдаваться наружу?
образно говоря буфер. память нужна чтобы туда вложить и оттуда возвратить - всё
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2012, 17:00 #11
Если в цикле, почему нельзя освобождать память после каждой итерации? Указатель же на неё сохраняется после выхода из функции? По куску кода трудно советовать.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 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
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
19.10.2012, 17:11 #13
Цитата Сообщение от quizzee Посмотреть сообщение
вот только я понятию не имею где это сделать
Как только станет не нужна.

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

Добавлено через 12 секунд
Цитата Сообщение от quizzee Посмотреть сообщение
образно говоря буфер. память нужна чтобы туда вложить и оттуда возвратить - всё
Временно положить, потом взять? Это не образ. Но такую память не выдают наружу из той функции, где она используется. А после использования удаляют.
0
quizzee
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 17:15  [ТС] #14
Цитата Сообщение от taras atavin Посмотреть сообщение
Но такую память не выдают наружу из той функции, где она используется.
а что же мне в таком случае возвращать?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
19.10.2012, 17:17 #15
Цитата Сообщение от quizzee Посмотреть сообщение
Сообщение от taras atavin Посмотреть сообщение
Но такую память не выдают наружу из той функции, где она используется.
а что же мне в таком случае возвращать?
Имеется ввиду, что память удаляется в той же функции, где и выделяется. Соответственно в той же функции и необходимо обрабатывать эту память.
0
19.10.2012, 17:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2012, 17:17
Привет! Вот еще темы с ответами:

Повреждение кучи - C++
Есть код #include &lt;iostream&gt; using namespace std; struct STUDENT { char NAME; int GROUP; int SES; };

Ошибка кучи - C++
Выдает ошибку: &quot;ОС Windows инициировала точку останова в Lab2.exe.Это может быть вызвано повреждением кучи и указывает на ошибку в Lab2.exe...

Повреждение кучи - C++
После выполнения программы выдаёт ошибку Debug Assertion Failed Помогите найти и исправить место из-за которого ошибка, я так понимаю она...

Ошибка кучи - C++
Здравствуйте, уважаемые программисты. Возникла у меня такая проблема: Задали сделать курсовую работу на С++ через MFC. Суть задачи: В...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.