|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.02.2013, 15:41 | #1 |
Пользователь
Регистрация: 06.02.2013
Сообщений: 21
|
Вопрос по компиляторам и средам программирования.
1). Я использую компилятор MinGW и среду разработки Dev-C++. Не получается вводить в программу массивы с большим количеством элементов, к примеру, массив, состоящий из 1000000 элементов. Как только открывается консоль, сразу же выскакивает сообщение об ошибке. В то время как мне нужно использовать как минимум такой массив.
Данный факт зависит от компилятора? (Ошибка в программе исключена, так как если ввести массив с меньшим количеством элементов, то все работает). И если зависит, то можете посоветовать хороший компилятор, и если возможно, то ссылку на него. При этом очень важно быстродействие программы. 2). Если я перепишу программу с Паскаля, использующую и обрабатывающую большие входные данные, на Си, то возможно ли уменьшение работы программы? P.S. Разрядность процессора - х86. ОС - Windows XP SP3. Заранее благодарен. |
09.02.2013, 16:28 | #2 |
Форумчанин
Регистрация: 03.10.2010
Сообщений: 321
|
Windows 7 x64 MinGW
Код:
|
09.02.2013, 17:22 | #3 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
1) Может быть, массив в стеке создаёшь?
2) Особо надеяться не стоит, хотя такое не исключено. |
09.02.2013, 18:39 | #4 |
Пользователь
Регистрация: 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 и все работает. |
09.02.2013, 19:29 | #5 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,318
|
Создавайте массив динамически, как написал Hemul.
Насчет уменьшения времени работы - возможно.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
09.02.2013, 19:32 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Просто интересно, а зачем такой огромный объем для массива?
I'm learning to live...
|
09.02.2013, 20:22 | #7 | |||
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
А если неправильно - может быть все что угодно. Используя С, конечно, можно получить после компиляции немного более оптимальный код, чем используя Паскаль, но при использовании объемов памяти превосходящих объем кэша, разницы быть не должно. Цитата:
Более того, в семействе х86 есть процессоры с тремя разными значениями разрядности. Поэтому х86 о разрядности совершенно ничего не говорит. Если под х86 подразумевается 16 разрядов, то массивов длиннее 32767 (для int) там быть не может. Цитата:
Т.е. если я выделяю под массив, скажем, 1 Гбайт - я что-то делаю не так? Если человек особо оговаривает, что его серьезно волнует скорость выполнения программы, то объем данных, исчисляемый миллионами, мне кажется, вполне правдоподобным. |
|||
09.02.2013, 20:34 | #8 | |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,318
|
Цитата:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
|
09.02.2013, 20:36 | #9 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
Такой обьем хорош для статических данных, положение которых в массиве известно. Но не дай боже нужно делать по нему многочисленные проходы. Вот тут то и пожалеть можно о таких размерах массива.
I'm learning to live...
|
||
09.02.2013, 22:40 | #10 |
Пользователь
Регистрация: 06.02.2013
Сообщений: 21
|
Для решения задачи требуется такой большой массив. Старался оптимизировать код насколько это можно. Задача так же предполагает, что требуется выводить очень большой объем данных, а именно этот миллион чисел, которые хранятся в массиве. Практика показала, что 500000 чисел Паскаль выводит за 2 минуты 12 секунд (померено не секундомером, а мной же написанным таймером), в то время как на Си выводится гораздо быстрее (примерно секунд 20, даже скорей всего меньше), поэтому рентабельней все же переписать программу на Си.
Процессор 32-ух разрядный. Но если писать программу на Паскале, то 1000000 и даже больше элементов прекрасно вводятся, обрабатываются и выводятся, в то время как если писать программу на Си, если вводить массив больше 500000 элементов, выводится ошибка при запуске программы. Поэтому массив в 1000000 на моем компьютере вполне поддерживается. Поэтому меня волнует именно проблема связанная с вылетающей ошибкой при введении массива в 1000000. Какие-нибудь предложения по ее устранению есть? Я думаю, что нужно поменять компилятор, так как этот даже не воспринимает вычисления с числами типа long double, несмотря на все усилия. Если это возможно, дайте ссылку на хороший компилятор. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос про обращение серверного языка веб-программирования | Амелия | Паскаль, 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 |