Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2013, 15:41   #1
Metaluk
Пользователь
 
Регистрация: 06.02.2013
Сообщений: 21
По умолчанию Вопрос по компиляторам и средам программирования.

1). Я использую компилятор MinGW и среду разработки Dev-C++. Не получается вводить в программу массивы с большим количеством элементов, к примеру, массив, состоящий из 1000000 элементов. Как только открывается консоль, сразу же выскакивает сообщение об ошибке. В то время как мне нужно использовать как минимум такой массив.
Данный факт зависит от компилятора? (Ошибка в программе исключена, так как если ввести массив с меньшим количеством элементов, то все работает). И если зависит, то можете посоветовать хороший компилятор, и если возможно, то ссылку на него. При этом очень важно быстродействие программы.
2). Если я перепишу программу с Паскаля, использующую и обрабатывающую большие входные данные, на Си, то возможно ли уменьшение работы программы?
P.S. Разрядность процессора - х86. ОС - Windows XP SP3.
Заранее благодарен.
Metaluk вне форума Ответить с цитированием
Старый 09.02.2013, 16:28   #2
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

Windows 7 x64 MinGW

Код:
int *mas = new int[1000000];
    delete[] mas;

    int mas2[1000000];
оба варианта работают
Hemul вне форума Ответить с цитированием
Старый 09.02.2013, 17:22   #3
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

1) Может быть, массив в стеке создаёшь?
2) Особо надеяться не стоит, хотя такое не исключено.
Somebody вне форума Ответить с цитированием
Старый 09.02.2013, 18:39   #4
Metaluk
Пользователь
 
Регистрация: 06.02.2013
Сообщений: 21
По умолчанию

Например:
#include <stdio.h>
#include <conio.h>

int main(void)
{
long int mas[1000000];
for(int i = 0; i<1000000; ++i)
{
mas[i] = i;
printf("%d", mas[i]);
}
getch();
return 0;
}
Компилирую, запускаю и вылетает сообщение об ошибке
Exception Information
code: 0xc00000fd.

Меняю 1000000 на 500000 и все работает.
Metaluk вне форума Ответить с цитированием
Старый 09.02.2013, 19:29   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Создавайте массив динамически, как написал Hemul.
Насчет уменьшения времени работы - возможно.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.02.2013, 19:32   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Просто интересно, а зачем такой огромный объем для массива?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.02.2013, 20:22   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Metaluk Посмотреть сообщение
2). Если я перепишу программу с Паскаля, использующую и обрабатывающую большие входные данные, на Си, то возможно ли уменьшение работы программы?
Если программа написана правильно - разница будет незаметна.
А если неправильно - может быть все что угодно.
Используя С, конечно, можно получить после компиляции немного более оптимальный код, чем используя Паскаль, но при использовании объемов памяти превосходящих объем кэша, разницы быть не должно.
Цитата:
P.S. Разрядность процессора - х86.
Нет такой разрядности.
Более того, в семействе х86 есть процессоры с тремя разными значениями разрядности. Поэтому х86 о разрядности совершенно ничего не говорит.
Если под х86 подразумевается 16 разрядов, то массивов длиннее 32767 (для int) там быть не может.
Цитата:
ОС - Windows XP SP3.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Просто интересно, а зачем такой огромный объем для массива?
Т.е. если я выделяю под массив, скажем, 1 Гбайт - я что-то делаю не так?
Если человек особо оговаривает, что его серьезно волнует скорость выполнения программы, то объем данных, исчисляемый миллионами, мне кажется, вполне правдоподобным.
s-andriano вне форума Ответить с цитированием
Старый 09.02.2013, 20:34   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Цитата:
Если человек особо оговаривает, что его серьезно волнует скорость выполнения программы, то объем данных, исчисляемый миллионами, мне кажется, вполне правдоподобным.
Да, Вы правы, но велика вероятность использования не оптимальных алгоритмов (ну может и не велика, но исключать такой возможности нельзя), что и привело к такой требовательности по памяти.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.02.2013, 20:36   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
я что-то делаю не так?
Не не так. Все зависит от задачи, я потому и спрашиваю зачем такой массив.
Цитата:
Если человек особо оговаривает, что его серьезно волнует скорость выполнения программы, то объем данных, исчисляемый миллионами, мне кажется, вполне правдоподобным.
Ога. При любом алгоритме конечно. Не смеши.
Такой обьем хорош для статических данных, положение которых в массиве известно. Но не дай боже нужно делать по нему многочисленные проходы. Вот тут то и пожалеть можно о таких размерах массива.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.02.2013, 22:40   #10
Metaluk
Пользователь
 
Регистрация: 06.02.2013
Сообщений: 21
По умолчанию

Для решения задачи требуется такой большой массив. Старался оптимизировать код насколько это можно. Задача так же предполагает, что требуется выводить очень большой объем данных, а именно этот миллион чисел, которые хранятся в массиве. Практика показала, что 500000 чисел Паскаль выводит за 2 минуты 12 секунд (померено не секундомером, а мной же написанным таймером), в то время как на Си выводится гораздо быстрее (примерно секунд 20, даже скорей всего меньше), поэтому рентабельней все же переписать программу на Си.
Процессор 32-ух разрядный.
Но если писать программу на Паскале, то 1000000 и даже больше элементов прекрасно вводятся, обрабатываются и выводятся, в то время как если писать программу на Си, если вводить массив больше 500000 элементов, выводится ошибка при запуске программы. Поэтому массив в 1000000 на моем компьютере вполне поддерживается.

Поэтому меня волнует именно проблема связанная с вылетающей ошибкой при введении массива в 1000000. Какие-нибудь предложения по ее устранению есть?
Я думаю, что нужно поменять компилятор, так как этот даже не воспринимает вычисления с числами типа long double, несмотря на все усилия.
Если это возможно, дайте ссылку на хороший компилятор.
Metaluk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про обращение серверного языка веб-программирования Амелия Паскаль, Turbo Pascal, PascalABC.NET 0 03.06.2012 12:18
And once again. Вопрос общего характера по выбору языка программирования. eepive Помощь студентам 6 13.05.2011 10:37
много материалов по компиляторам, трансляторам, транслитераторам, лексическим анализаторам и т.п. Marsel737 Свободное общение 1 03.09.2010 17:58
тест по Операционным системам,средам и оболочкам guns'ik Помощь студентам 0 26.04.2010 19:13
Вопрос по языкам программирования mixer94 Помощь студентам 4 08.06.2009 12:22