Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.83
seravr
1 / 1 / 0
Регистрация: 11.11.2008
Сообщений: 34
#1

Вопрос про статический массив - C++

01.01.2009, 20:24. Просмотров 3534. Ответов 12
Метки нет (Все метки)

Люди, у меня вопрос, подскажите пожалуйста почему я не могу создать статический массив(не важно какого типа) больше 1 мегабайта (в среднем)? К примеру, статический массив типа char из 1000 000 элементов создается, но больше- нет, также и с типом int (примерно максимальное кол-во элементов можно создать 250 000, он занимает 4 байта, т.е. больше char в 4 раза, соответственно, кол-во элементов в 4 раза меньше), вообщем больше метра не выделяет памяти, а динамический выделяет сколь угогдно большой????
Подскажите как это исправить и что можно сделать, чтобы выделить большой статический массив???

Заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2891 / 1240 / 78
Регистрация: 27.05.2008
Сообщений: 3,345
01.01.2009, 22:03     Вопрос про статический массив #2
А компилятор/ось какие?
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
01.01.2009, 22:33     Вопрос про статический массив #3
seravr, статические элементы размещаются в стеке. Например, в студии по умолчанию он ограничен 1Мб. И это правильно. Это же стек. Делать локальные элементы большего размера - не есть гут. Выход есть. Увеличь размер стека.
А вообще, используй динамическое выделение. Это самое правильное решение.
seravr
1 / 1 / 0
Регистрация: 11.11.2008
Сообщений: 34
01.01.2009, 23:40  [ТС]     Вопрос про статический массив #4
спасибо, понял, а скажите как узнать какой размер стека на и как в студии изменить ограничения?

Добавлено через 46 секунд
Цитата Сообщение от CheshireCat Посмотреть сообщение
А компилятор/ось какие?
студия 2008
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
01.01.2009, 23:57     Вопрос про статический массив #5
Скачай себе MSDN:
You may need to increase the stack size if your program gets stack-overflow messages.

You can also set the stack size by:

Using the /STACK linker option. For more information, see /STACK.

Using EDITBIN on the .exe file. For more information, see EDITBIN Reference.
Не забывай, что стек не резиновый. Ты не сможешь увеличить его размер сверх пределов налагаемых линкером.
CheshireCat
Эксперт С++
2891 / 1240 / 78
Регистрация: 27.05.2008
Сообщений: 3,345
02.01.2009, 14:55     Вопрос про статический массив #6
Ээээ... статические данные размещаются в стеке? Здрассте, это с какого перепугу? Ах да, на дворе Новый год и праздники ....
Код
#include <iostream>
using namespace std;

static int array[500 * 1024 * 1024];  // 500 Мбайт * sizeof(int) == почти 2 Гбайт

int main()
{
    cout << "-------------------" << endl
         << "size of array is " << sizeof(array) << " bytes" << endl;
    // Output:
    // -------------------
    // size of array is 2097152000 bytes
}
В стеке размещаются локальные (автоматические) данные; и в этом случае о размере стека замечание правильное.
seravr
1 / 1 / 0
Регистрация: 11.11.2008
Сообщений: 34
02.01.2009, 20:17  [ТС]     Вопрос про статический массив #7
Товарищи, спасибо за ответы, подскажите плиз как изменить в студии размер стека и скажите как узнать какая глубина стека???
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.01.2009, 22:26     Вопрос про статический массив #8
Цитата Сообщение от Vourhey Посмотреть сообщение
Делать локальные элементы большего размера - не есть гут.
Читай внимательно: Делать локальные элементы. Под статическим, как ты успел не заметить, я имел ввиду не ключевое слово static, а способ выделения памяти. Сори, что ввел в заблуждение своими словесными оборотами ) С новым годом
seravr
1 / 1 / 0
Регистрация: 11.11.2008
Сообщений: 34
02.01.2009, 22:54  [ТС]     Вопрос про статический массив #9
дружищ, да я понимаю все что это не гут, просто надо, я прошу лишь подсказать как в настройках студии изменить ограничения стека, кстати, посмотри в личке, я письмо тебе написал
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.01.2009, 23:16     Вопрос про статический массив #10
Я выше, уже написал, как изменить. У линкера есть параметр /STACK:заразервированный_размер. Это все в настройках проекта найдешь. Ветка Linker, дочерняя - System.
Или можно editbin на бинарь натравить.
seravr
1 / 1 / 0
Регистрация: 11.11.2008
Сообщений: 34
02.01.2009, 23:30  [ТС]     Вопрос про статический массив #11
Спасибо, нашел, где Stack Reserve Size, там стоит ноль, т.е. по умолчанию значит 1 Мб, верно?
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.01.2009, 23:30     Вопрос про статический массив #12
верно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2009, 23:43     Вопрос про статический массив
Еще ссылки по теме:

Вопрос про табуляцию в C++ C++
Статический двумерный массив C++
Статический массив в классе C++
C++ Динамический и статический массив
Статический массив(вектор) C++

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

Или воспользуйтесь поиском по форуму:
seravr
1 / 1 / 0
Регистрация: 11.11.2008
Сообщений: 34
02.01.2009, 23:43  [ТС]     Вопрос про статический массив #13
т.е. там надо ставить значение в мегабайтах или килобайтах???интересно, а до скольки можно ставить??? скажите как можно узнать глубину стека???
Yandex
Объявления
02.01.2009, 23:43     Вопрос про статический массив
Ответ Создать тему
Опции темы

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