C/C++
Где хранить большой массив данных?
Мне нужно написать программу, обрабатывающую большой массив данных: 2 двумерных массива на 1000 строк и 10 столбцов. На с++. Но, храня эти данные в быстрой памяти, запуская программу, мне выдает ошибку что функция использует 20500 байт в стеке: значение превышает 16384 и программа вылетает. Это понятно. А где тогда хранить эти массивы? В текстовом документе неудобно. Для работы с Экселем нет бесплатных библиотек. Уже 2 день ищу способ решения проблемы. Как вообще в таких случаях поступают?)) Подскажите новичку, пожалуйста))))
Да уж...
В общем так, большие куски данных нужно выделять из кучи, для этого в С есть malloc и free а в C++ -new и delete.
Если хочется именно двумерный массив, то можно завести переменную типа указатель на указатель для строк и проинициализировать ее указателями на выделенные строки.
Есть другой путь: выделяем просто кусок памяти, равный длина*ширина а потом для доступа к ячейке с координатами x,y вычисляем смещение по формуле
offset = размер_ряда * y + x
Можно совместить эти два подхода, чтобы меньше фрагментировать кучу.
В общем так, большие куски данных нужно выделять из кучи, для этого в С есть malloc и free а в C++ -new и delete.
Если хочется именно двумерный массив, то можно завести переменную типа указатель на указатель для строк и проинициализировать ее указателями на выделенные строки.
Есть другой путь: выделяем просто кусок памяти, равный длина*ширина а потом для доступа к ячейке с координатами x,y вычисляем смещение по формуле
offset = размер_ряда * y + x
Можно совместить эти два подхода, чтобы меньше фрагментировать кучу.
Алексей Семиколенов
Решил проиллюстрировать написанное выше программой для операций с динамическим 2D массивом элементов типа long. Вот что получилось: https://pastebin.com/ZA2xzagj
Он тебе просто намекает, что твои массивы не помещаются в стеке (по-видимому, ты пытаешься передать статические массивы в некую функцию по значению).
Размер стека можно увеличить при компиляции, но в данном случае это тупой подход - гонять массивы через стек. Передавай массивы по ссылке либо используй динамические массивы.
Размер стека можно увеличить при компиляции, но в данном случае это тупой подход - гонять массивы через стек. Передавай массивы по ссылке либо используй динамические массивы.
храни в файле. все данные по работе с файлом буферизируются.. если твои данные будут фиксированные, то рассчитать смещение к нужной записи будет не сложно, либо посмотри в сторону sqlite3
Используй ОЗУ, создавай динамический массив
>большой массив данных: 2 двумерных массива на 1000 строк и 10 столбцов.
Это не большой
>быстрой памяти
что вы подразумеваете под "быстрой памятью" с учетом всего сказанного?
>функция использует 20500 байт в стеке: значение превышает 16384 и программа вылетает
размер пользовательского стека в современных компиляторах около мегабайта по дефолту. Вы там на досовском программируете что-ли или ухитрились стек ядра на вызовах переполнить?
>А где тогда хранить эти массивы?
в куче. Открываете учебник и читаете, как инициализировать и использовать двумерные массивы.
Это не большой
>быстрой памяти
что вы подразумеваете под "быстрой памятью" с учетом всего сказанного?
>функция использует 20500 байт в стеке: значение превышает 16384 и программа вылетает
размер пользовательского стека в современных компиляторах около мегабайта по дефолту. Вы там на досовском программируете что-ли или ухитрились стек ядра на вызовах переполнить?
>А где тогда хранить эти массивы?
в куче. Открываете учебник и читаете, как инициализировать и использовать двумерные массивы.
Похожие вопросы
- Задача на С Объявить массив данных типа double размером 3 на 3.
- C++: где vector хранит внутренний массив? В стеке или в куче?
- Даны три числа. Вывести вначале наименьшее, а затем наибольшее из данных чисел. с++
- Написать программу «справочник». Создать два одномерных массива. Один массив хранит номера мобильных телефонов, второй
- Заменить нулями элементы массива, которые расположены между первым минимальным и последним максимальным элементами масси
- Помогите исправить и дописать программу с массивами на языке C++. Буду благодарен, т. к. самому уже не понятно.
- Нужна помощь в составлении одномерных массивов С++
- Кольцевой сдвиг массива
- Помогите пожалуйста с Массивами .В языке С .Заполнил 2-мерный массив N и M случайными числами дальше не понимаю.
- Устройство статических и динамических массивов в оперативной памяти (...)