Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать очень большой массив? 
V
    Опции темы
Wolf1994
Дата 21.3.2009, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: нет
Всего: 29



Какого максимального размера можно создавать массивы в C++?

Создание, например, такого массива:
Код

char dm3 [100000] [64];

не вызывает ошибок при компиляции, но приводит к:
http://www.wolf-ware.ru/graphics/posts/wc_error.gif

Максимальный размер массива, при котором программа работает без ошибок:
Код

char dm3 [20000] [64];


Как обойти это ограничение?
PM MAIL WWW   Вверх
andrew_121
Дата 21.3.2009, 11:09 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Wolf1994, А про функции выделения слышали?
malloc() - это С функция.
new - это С++ оператор.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
GoldFinch
Дата 21.3.2009, 14:36 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



глобальные - практически любого размера
локальные  - небольшого, чтобы в стек влезли

Добавлено через 1 минуту и 31 секунду
new - не лучший вариант для больших массивов, может не влезть в хип и вообще хип не для такого
PM MAIL ICQ   Вверх
zim22
Дата 21.3.2009, 14:57 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(GoldFinch @  21.3.2009,  14:36 Найти цитируемый пост)
new - не лучший вариант для больших массивов

что вы тогда посоветуете вместо new использовать? WinAPI не предлагать.


--------------------
PM MAIL   Вверх
JackYF
Дата 21.3.2009, 15:23 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(GoldFinch @  21.3.2009,  13:36 Найти цитируемый пост)
new - не лучший вариант для больших массивов, может не влезть в хип и вообще хип не для такого 

Это, простите, чушь.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
GoldFinch
Дата 21.3.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



zim22, когда бы выделяете область памяти небольшого размера средствами языка, это выделение незначительно в масштабах системы, поэтому язык может это осуществить исключительно своими средствами
Когда вы выделяете кусок памяти размером сопоставимым с ограничениями конкретной системы, то язык нормально такой кусок памяти уже выделит. 
В ряде случаев помогут специфичные для системы настройки компилятора (увеличение размера хипа\стека по умолчанию), но это плохое решение, т.к. не всегда нужен большой хип и\или стек.
Поэтому надо юзать системные функции, для выделения своего хипа и\или изменения стека конкретного потока.
Но использование хипа или стека для длительного хранения небольшого числа данных большого размера, например 2-3 массива по 250Мб, это не есть хорошо, потому что хип особенно полезен для частого выделения\освобождения небольших кусков памяти разной длины, а стек вообще не для этого.
Поэтому надо юзать системные функции для выделения кусков памяти под отдельные большие структуры данных

Вобщем без использования системных функций, можно
- использовать глобальный массив, т.е. сразу зарезервировать место в образе файла
- увеличить размер хипа в десятки раз, но это не гарантирует что вследствие его фрагментации в нем всегда будет место под большой кусок памяти. Например сделали хип 500Мб, выделили 250Мб, выделили 1б, удалили 250Мб, выделили 1б, теперь 250Мб уже не выделить.
PM MAIL ICQ   Вверх
Lazin
Дата 21.3.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(GoldFinch @  21.3.2009,  14:36 Найти цитируемый пост)
new - не лучший вариант для больших массивов, может не влезть в хип и вообще хип не для такого

пардон, а чем-же тогда? smile 
PM MAIL Skype GTalk   Вверх
GoldFinch
Дата 21.3.2009, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



для справки
в win32 процессу отведено менее 2Гб памяти, вследствие ее фрагментации нет гарантии что там окажется непрерывный кусок хотябы в 1Гб,
размер зарезервированного хипа по умолчанию - 100Мб
PM MAIL ICQ   Вверх
andrew_121
Дата 21.3.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Похоже кто-то вчера праздновал по полной )))

Добавлено через 4 минуты и 22 секунды
Цитата(GoldFinch @  21.3.2009,  15:27 Найти цитируемый пост)
нет гарантии что там окажется непрерывный кусок хотябы в 1Гб

Ну так это про фрагментацию. Память, ваще имеет свойство фрагментироваться. Думаю это не для кого не секрет.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
GoldFinch
Дата 21.3.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



andrew_121, ты посты целиком читаешь, или выборочно про 5 слов?
у меня и было написано "вследствие ее фрагментации нет гарантии ..."
зачем повторять то что я уже написал?
PM MAIL ICQ   Вверх
zim22
Дата 21.3.2009, 15:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



четыреста миллионов элементов int.
полтора гига оперативки сожрали.
чем new не устраивает, не понимаю...
Код

int *p = new int [400000000];
delete p;



--------------------
PM MAIL   Вверх
andrew_121
Дата 21.3.2009, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(zim22 @  21.3.2009,  15:50 Найти цитируемый пост)
чем new не устраивает, не понимаю...

Солидарен.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
GoldFinch
Дата 21.3.2009, 16:25 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



действительно через new память выделяется, причем совсем не так как я себе представлял, кусками в разных местах памяти


PM MAIL ICQ   Вверх
Rififi
Дата 21.3.2009, 17:24 (ссылка)  | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 3
Всего: 36



Как создать очень большой массив?
решение состоит из двух этапов:
1. купить много-много гигабайтов оперативной памяти
2. перейти на 64-битную платформу
PM MAIL   Вверх
mes
Дата 21.3.2009, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Rififi @  21.3.2009,  16:24 Найти цитируемый пост)
1. купить много-много гигабайтов оперативной памяти


Цитата(Wolf1994 @  21.3.2009,  09:52 Найти цитируемый пост)
char dm3 [100000] [64];

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

Это сообщение отредактировал(а) mes - 21.3.2009, 17:33


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0948 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.