Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
quizzee
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 15:42     грамотное использование кучи #1
искал но не нашел. ни здесь, ни где бы то ни было.

вкратце:

есть функция

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

Размер кучи C++
Границы кучи C++
C++ Повреждение кучи
C++ Как сделать грамотное обращение к текстурам?
C++ Ошибка кучи
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.10.2012, 15:55     грамотное использование кучи #2
Опиши словами, что тебе нужно, по графику это не очевидно.
quizzee
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 16:08  [ТС]     грамотное использование кучи #3
в функции объявлен динамический массив. затем его необходимо возвратить, поэтому возможности освободить занимаемый участок памяти нет. в результате, при многократном обращении к функции, память заполняется до краев.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2012, 16:35     грамотное использование кучи #4
Цитата Сообщение от quizzee Посмотреть сообщение
затем его необходимо возвратить
Дальше с ним что? Нужен до конца программы?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.10.2012, 16:39     грамотное использование кучи #5
Цитата Сообщение от quizzee Посмотреть сообщение
в функции объявлен динамический массив. затем его необходимо возвратить, поэтому возможности освободить занимаемый участок памяти нет. в результате, при многократном обращении к функции, память заполняется до краев.
Значит тебе нужно столько памяти. Не факт только, что физической оперативной. Что тебе нужно? Разрешить системе свопить динамическую память твоей прилады? Или подключить свои файлы аля своя подкачка?
quizzee
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 16:44  [ТС]     грамотное использование кучи #6
alsav22, нет, используется как буфер внутри конкретной функции. вот только дело в том что мне эту функцию в цикле нужно использовать
Dmitriy_M
1294 / 1175 / 104
Регистрация: 20.03.2009
Сообщений: 4,208
Записей в блоге: 11
19.10.2012, 16:45     грамотное использование кучи #7
Цитата Сообщение от quizzee Посмотреть сообщение
поэтому возможности освободить занимаемый участок памяти нет
врешь, можно.
quizzee
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 16:47  [ТС]     грамотное использование кучи #8
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
врешь, можно.
в этой же функции?)
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.10.2012, 16:50     грамотное использование кучи #9
Цитата Сообщение от quizzee Посмотреть сообщение
alsav22, нет, используется как буфер внутри конкретной функции. вот только дело в том что мне эту функцию в цикле нужно использовать
А с какой стати буфера стали выдаваться наружу?
quizzee
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 16:56  [ТС]     грамотное использование кучи #10
Цитата Сообщение от taras atavin Посмотреть сообщение
Что тебе нужно? Разрешить системе свопить динамическую память твоей прилады? Или подключить свои файлы аля своя подкачка?
да при чем здесь подкачка мне необходимо осовободить занимаемую память, вот только я понятию не имею где это сделать

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
А с какой стати буфера стали выдаваться наружу?
образно говоря буфер. память нужна чтобы туда вложить и оттуда возвратить - всё
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2012, 17:00     грамотное использование кучи #11
Если в цикле, почему нельзя освобождать память после каждой итерации? Указатель же на неё сохраняется после выхода из функции? По куску кода трудно советовать.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11823 / 6802 / 769
Регистрация: 27.09.2012
Сообщений: 16,870
Записей в блоге: 2
Завершенные тесты: 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];
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.10.2012, 17:11     грамотное использование кучи #13
Цитата Сообщение от quizzee Посмотреть сообщение
вот только я понятию не имею где это сделать
Как только станет не нужна.

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

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

Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
Соответственно в той же функции и необходимо обрабатывать эту память.
мне эту память нужно использовать непосредственно как возвращаемое значение функции
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.10.2012, 17:23     грамотное использование кучи #17
С какой стати буфера стали выдаваться наружу?
quizzee
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 17:40  [ТС]     грамотное использование кучи #18
Цитата Сообщение от taras atavin Посмотреть сообщение
С какой стати буфера стали выдаваться наружу?
но мне ведь надо вернуть двумерный массив.
как же я верну не указатель??
quizzee
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 18
19.10.2012, 17:42  [ТС]     грамотное использование кучи #19
может это я крайне криво мыслю)
вот реализация
Вложения
Тип файла: zip Архив ZIP - WinRAR.zip (1.7 Кб, 6 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2012, 20:11     грамотное использование кучи
Еще ссылки по теме:

Повреждение кучи C++
C++ Необходимо грамотное отсечение столбцов и строк двумерного массива!
C++ Получать различные начала кучи при создании кучи внутри цикла

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

Или воспользуйтесь поиском по форуму:
Dmitriy_M
1294 / 1175 / 104
Регистрация: 20.03.2009
Сообщений: 4,208
Записей в блоге: 11
19.10.2012, 20:11     грамотное использование кучи #20
Цитата Сообщение от quizzee Посмотреть сообщение
в этой же функции?)
вне этой функции, когда он больше не нужен.
Yandex
Объявления
19.10.2012, 20:11     грамотное использование кучи
Ответ Создать тему
Опции темы

Текущее время: 11:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru