Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
quizzee
0 / 0 / 1
Регистрация: 19.10.2012
Сообщений: 18
#1

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

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

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

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

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

Упрощение, более грамотное написание условия
Доброе время суток! Написал условие: if...

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

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

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
А с какой стати буфера стали выдаваться наружу?
образно говоря буфер. память нужна чтобы туда вложить и оттуда возвратить - всё
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2012, 17:00 #11
Если в цикле, почему нельзя освобождать память после каждой итерации? Указатель же на неё сохраняется после выхода из функции? По куску кода трудно советовать.
0
Croessmah
++Ͻ
14158 / 8083 / 1513
Регистрация: 27.09.2012
Сообщений: 19,920
Записей в блоге: 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
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
19.10.2012, 17:11 #13
Цитата Сообщение от quizzee Посмотреть сообщение
вот только я понятию не имею где это сделать
Как только станет не нужна.

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

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

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

Размер кучи
С помощью какой библиотечной ф-ции или как узнать размер кучи в языке Си?

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

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

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


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

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

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