![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Wolf1994 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: нет Всего: 29 |
Какого максимального размера можно создавать массивы в C++?
Создание, например, такого массива:
не вызывает ошибок при компиляции, но приводит к: http://www.wolf-ware.ru/graphics/posts/wc_error.gif Максимальный размер массива, при котором программа работает без ошибок:
Как обойти это ограничение? |
||||
|
|||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
Wolf1994, А про функции выделения слышали?
malloc() - это С функция. new - это С++ оператор. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
глобальные - практически любого размера
локальные - небольшого, чтобы в стек влезли Добавлено через 1 минуту и 31 секунду new - не лучший вариант для больших массивов, может не влезть в хип и вообще хип не для такого |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
что вы тогда посоветуете вместо new использовать? WinAPI не предлагать. |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
||||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
zim22, когда бы выделяете область памяти небольшого размера средствами языка, это выделение незначительно в масштабах системы, поэтому язык может это осуществить исключительно своими средствами
Когда вы выделяете кусок памяти размером сопоставимым с ограничениями конкретной системы, то язык нормально такой кусок памяти уже выделит. В ряде случаев помогут специфичные для системы настройки компилятора (увеличение размера хипа\стека по умолчанию), но это плохое решение, т.к. не всегда нужен большой хип и\или стек. Поэтому надо юзать системные функции, для выделения своего хипа и\или изменения стека конкретного потока. Но использование хипа или стека для длительного хранения небольшого числа данных большого размера, например 2-3 массива по 250Мб, это не есть хорошо, потому что хип особенно полезен для частого выделения\освобождения небольших кусков памяти разной длины, а стек вообще не для этого. Поэтому надо юзать системные функции для выделения кусков памяти под отдельные большие структуры данных Вобщем без использования системных функций, можно - использовать глобальный массив, т.е. сразу зарезервировать место в образе файла - увеличить размер хипа в десятки раз, но это не гарантирует что вследствие его фрагментации в нем всегда будет место под большой кусок памяти. Например сделали хип 500Мб, выделили 250Мб, выделили 1б, удалили 250Мб, выделили 1б, теперь 250Мб уже не выделить. |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
||||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
для справки
в win32 процессу отведено менее 2Гб памяти, вследствие ее фрагментации нет гарантии что там окажется непрерывный кусок хотябы в 1Гб, размер зарезервированного хипа по умолчанию - 100Мб |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
Похоже кто-то вчера праздновал по полной )))
Добавлено через 4 минуты и 22 секунды Ну так это про фрагментацию. Память, ваще имеет свойство фрагментироваться. Думаю это не для кого не секрет. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
andrew_121, ты посты целиком читаешь, или выборочно про 5 слов?
у меня и было написано "вследствие ее фрагментации нет гарантии ..." зачем повторять то что я уже написал? |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
четыреста миллионов элементов int.
полтора гига оперативки сожрали. чем new не устраивает, не понимаю...
|
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
действительно через new память выделяется, причем совсем не так как я себе представлял, кусками в разных местах памяти
|
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
Как создать очень большой массив?
решение состоит из двух этапов: 1. купить много-много гигабайтов оперативной памяти 2. перейти на 64-битную платформу |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
так человеко требуется всего шесть с половиной мегабайт, а Вы его нагружаете много много гигабайтной ОЗУ. ![]() Это сообщение отредактировал(а) mes - 21.3.2009, 17:33 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |