![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Marcino |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 26.10.2006 Репутация: нет Всего: нет |
Мне надо создать массив с 100000 float... Но я некак не могу понять, почему приходитса использовать указатели... как я могу делать операции - умножать, делить с каждым елементом етого массива, которий должен состоять из 100000 или больше элементов?
Учусь я на Borland c++ for DOS. Помогите! Буду благодарен, если поправите код! #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <alloc.h> int main(void) { float *at; if ((at = (float *) malloc(400000l)) == NULL) // почему надо использовать указатель? { printf("Error at\n"); exit(1); } return 0; } |
|||
|
||||
| vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
иначе стек рухнет(скорее всего, если он у тебя не больше стандартного)
ниче не понял, перефразируй.. |
||||
|
|||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
100000*sizeof(float)/1024 = 390 кбайт (в досе маскимальный размер 64к) имхо нифига у тя не получиться (где то видел где есть возможность преодоления 64к но не помню где) хотя давно я программил под дос могу и ошибатся -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
||||
|
||||
| regis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: 2 Всего: 7 |
Во первых, если код на C++, то грамотнее применять new вместо malloc:
и явно ловить NULL действительно не надо -- вместо этого надо обрабатывать исключение. Во вторых, неужели действительно такой большой массив требуется? Он займет изрядную часть conventional memory ДОСа. --------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Сегмент данных нельзя использовать? Или отвращение к глобальным данным?
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
MAKCim,
На сколько я помню, сегмент данных - тоже 64 килобайта. Так что наверное не получится... (мы же программулину под ДОС рассматриваем) Это сообщение отредактировал(а) Kuvaldis - 26.10.2006, 16:42 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
да, правда можно иметь несколько сегментов. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Kuvaldis
ну да, тут же реальный режим Добавлено @ 16:51 vinter Сомневаюсь, что один большой кусок данных можно раскидать по нескольким сегментам Точнее можно, но обращение к данным будет сложнее -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Вообще надо еще посмотреть и разобраться, для чего нужно столько памяти: как вариант, нельзя исключать и использвание массива бит (битовых полей). В универе преподы старшего поколения с примерами такого рода знакомили нас регулярно...
-------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| regis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: 2 Всего: 7 |
Да, давненько я не программировал под DOS -- элементарные вещи забывать стал. ;)
Дело не только в том, что обычной памяти требуется много -- но и массив такого размера не влезет в один 64K сегмент. Так что, чтобы обращения к нему были правильными, указатель надо описывать так:
И тогда, вроде, все будет правильно -- хотя желательно проверить экспериментально. --------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
боюсь что большой блок все равно выделить не удастся. Хотя можно попытаться поставить модель памяти huge...
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Для больших данных хватит модели far. Huge-модель - это когда еще и код в разных сегментах. Вроде бы, насколько помню.
-------------------- ... |
|||
|
||||
| vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
да
ты видимо имела ввиду, что-то другое так как такой модели нет |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Честно сказать, уже не помню, как это называется... Но была такая модель, когда данные могут занимать много сегментов, а код - один. Помню, что чем-то модель huge мне не понравилась... -------------------- ... |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: нет Всего: 23 |
Может это XMS?
|
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 8 Всего: 158 |
||||
|
||||
| LexSTV |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 20.3.2007 Репутация: нет Всего: 2 |
Добрые друзья, подскажите пожалуйста, мне нужно выделить объем памяти 1 гб чтоб передать этот файл функции шифрования, разбиение не подходит в этом случае...
еще большое спасибо, если скажете, сколько памяти выделяет malloc максимально? (вроде выше написано, что 64 кб, но это совсем мало, надо хотябы 30 - 50) заранее большое спасибо |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
нет, это было написано для 16-разрядных систем. В 32-разрядных системах malloc() и new() не имеют таких ограничений. При наличие соответствующего объема физ. памяти память корректно выделится. З.Ы. А почему бы просто не взять и не попробовать сделать malloc(1024*1024*1024)? |
|||
|
||||
| LexSTV |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 20.3.2007 Репутация: нет Всего: 2 |
а нельзя так сделать, ибо ругается, что закончилась квота... а надо пользоваться фунцией HeapAlloc() она выделяет памяти до 1,5 гига, правда если ее использовать при написании dll то только 200 мб, странно.... Это сообщение отредактировал(а) LexSTV - 10.9.2007, 17:29 |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
это если размер физической памяти не превысит разрядность линейного адреса -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
это указатели far и near.
Посмотри Fortran, там эта huge модель тоже присутствует. Но выделять в ней сегменты придется кусками по 64 кила. То есть, твой массив разбить на несколько массивов at1, at2, ..., atn, где n-неизвестное мне число, потому что считать лень, а калькуляторам я из принципа не доверяю. Если досовская тачка, выгрузи все коммандеры, руссификаторы и остальные резидентные проги, освободишь (дай бог памяти Если это не прельщает, есть более медленный метод. создай два float fl[64К] (или один, если не будешь множить цифры между собой), и закачивай очередную порцию из файла, а предыдущие перезаписывай заместо старых). -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
LexSTV, вообще-то это неправильно выделять такой кусок памяти. Уж лучше тогда воспользуйся CreateFileMapping (Win32) или mmap (*nix). А еще лучше работать с файлом по частям.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |