|
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
|
|||||||||||
Переполнение стека28.11.2015, 20:38. Показов 1212. Ответов 8
Метки нет (Все метки)
Всем добрый вечер. Я создаю вектор, который имеет большой размер: порядка 256000000. Этот вектор имеет тип float, т.к. функция, куда я передаю по ссылке этот вектор, принимает на вход вещественный массив и заполняет его значениями. На этом первый этап закончен. Все работает.
На втором этапе мне нужно этот вектор передать в другую функцию, которая вместо float принимает unsigned char! Изначально я все делала по-глупому: я создавала ещё один массив типа unsigned char и с помощью явного преобразования получала массив типа unsigned char:
Как я поняла: при больших размерах стек переполняется и уже нет места запихнуть туда ещё один массив размером 256000000! Потом мне в голову пришла другая идея. Простая, но как вышло в итоге, глупая:
Мыслей по этому поводу нет, как поступить! Помогите советом!
0
|
|||||||||||
| 28.11.2015, 20:38 | |
|
Ответы с готовыми решениями:
8
Переполнение стека Переполнение стека Переполнение стека |
|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
|
| 28.11.2015, 21:08 | |
|
M4753, если Вам необходимо обрабатывать 256 000 000 объектов типа float и если на Вашей системе тип float занимает 4 байта (можно узнать, например, используя выражение sizeof(float); тогда только для хранения подобного массива потребуется примерно 976 мегабайт оперативной памяти.
Вектор хранит свои элементы не на стеке, а в куче. Стек размером 976 метров по умолчанию для программы был бы не доступен в любом случае. Скорее всего у Вас просто заканчивается память, доступная приложению для работы. Если бы Вы предоставили полный код программы, можно было более конкретно обсудить возможности для решения Вашей проблемы. Общие советы могут быть следующими: 1) исключить лишние копирования векторов, если они алгоритмически не требуются 2) понять, почему у Вас в системе, часть работы идет с типом float (число с плавающей точкой) а часть с unsigned char(без знаковый символьный) Эти типы имеют и разный размер (например: float - 4 байта, char 1 байт), так и разное назначение, и способ интерпретации. Привести программу к виду, работы с согласованными типами, либо точно выяснить какие преобразования необходимо совершать, для корректного перевода из одного типа в другой, исходя из предметной области решаемой задачи. 3) Возможно следует не пытаться сразу генерировать огромный массив, хранить его в памяти, а потом обрабатывать в других функциях, а генерировать маленькие его части (или вообще по 1 элементу) - сразу их обрабатывать, и потом уже каким-то образом складировать в памяти, если это необходимо 4) Возможно следует не пытаться хранить огромный массив в оперативной памяти, после его генерации - а сохранить его в долговременной памяти (например на диске в виде файла) - и при дальнейшей обработке - считывать из этого файла некоторые части данного массива данных.
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 28.11.2015, 21:14 | |
|
976 не так много для современного компьютера и есть же файл подкачки.
А вот зачем преобразовывать float в unsigned char не понятно. Может там сразу можно unsigned char использовать тогда?
0
|
|
|
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
|
|
| 28.11.2015, 21:15 [ТС] | |
|
Спасибо! Идея с обработкой по частям понравилась. Попробую реализовать! Спасибо!
Добавлено через 30 секунд Все это мне нужно в следующей задаче: я создаю tif изображение с помощью библиотеки libtiff. И мне нужно конвертировать tiff 32 битный float в 8 битный unsigned char.
0
|
|
|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
||||
| 28.11.2015, 21:16 | ||||
|
Небольшие ремарки в дополнение:
0
|
||||
|
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
|
|
| 28.11.2015, 21:18 [ТС] | |
|
Т.е. я сперва копирую всю инфу с первого изображению и потом записываю его во второе.
Добавлено через 1 минуту Melg, спасибо за исправления! Буду знать теперь!
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 28.11.2015, 21:19 | |
|
Вектор не по ссылке, что ли, передаётся?
0
|
|
|
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
|
|
| 28.11.2015, 21:20 | |
|
M4753, Вы можете привести конкретные сигнатуры библиотечных вызовов, и написанных Вами функций? Вы можете четко для себя и для честной публики ответить, зачем Вам нужно конвертировать float в unsigned char? Что хранится в исходном float-e? Что хранится в преобразованном char-е?
0
|
|
|
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
|
|
| 28.11.2015, 21:31 [ТС] | |
|
Сейчас опишу ситуацию.
Добавлено через 8 минут Я использую библиотеку libtiff, чтобы из 8-битного изображения получить 32-битное... Я делаю следующим образом: с помощью функций libtiff копирую весь массив, который хранится в изображении в свой вектор, который имеет тип unsigned char. Затем создаю 32 - битное изображение и туда мне нужно записать тот же самый вектор, но типа float. Если передать в фукнцию libtiff вектор unsigned char, то бред получится. Код слишком большой.
0
|
|
| 28.11.2015, 21:31 | |
|
Помогаю со студенческими работами здесь
9
Переполнение стека Переполнение стека Переполнение стека Рекурсия - переполнение стека
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|