Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ограничение 2 Gb: как справиться? Linux?

19K
10 августа 2006 года
ant3
7 / / 10.08.2006
Здравствуйте!
Разработал забывный алгоритм, реализацию сделал в Delphi.
Для работы требуется массив булевых очень большого размера.
Столкнулся с такой проблемой: windows отводит программе не более 2 Gb памяти, чего мне совершенно недостаточно. Не хотелсь бы заморачиваться с созданием и убиением массивов(подозреваю, что будет тормозить, а скорость критична).
Может быть в *nix нет такой проблемы? Имеет ли смысл переписать на С (предварительно изучив :-)) под Linux? Если да, то посоветуйте версию компилятора.

Спасибо.
240
10 августа 2006 года
aks
2.5K / / 14.07.2006
Вобще в 32-х битном процессоре адресовать можно максимум 4Гб памяти. Сколько выделять на процесс настравается впринципе админом. В Винде тоже можно выделить до 3гб. Но только начиная с WinXP SP2 вроде бы. Остальное система резервирует на себя. В различных версиях Linux с этим так же не однозначно. Но насколько я знаю - максимум тоже можно выделить 3гб. Ну и конечно ограничение памяти на процесс и юзера могут накладываться админом. Так что думай - сильно много на 32-битной архитектуре всеравно не разгонишся.
А компилятор: GCC =)))
Последняя версия вроде: 4.1.1
19K
10 августа 2006 года
ant3
7 / / 10.08.2006
[QUOTE=aks]Вобще в 32-х битном процессоре адресовать можно максимум 4Гб памяти. Сколько выделять на процесс настравается впринципе админом. В Винде тоже можно выделить до 3гб. Но только начиная с WinXP SP2 вроде бы. Остальное система резервирует на себя. В различных версиях Linux с этим так же однозначно. Но насколько я знаю - максимум тоже можно выделить 3гб. Ну и конечно ограничение памяти на процесс и юзера могут накладываться админом. Так что думай - сильно много на 32-битной архитектуре всеравно не разгонишся.
А компилятор: GCC =)))
Последняя версия вроде: 4.1.1[/QUOTE]
Спасибо! Я не великий знаток линуха, насколько смог понять - там настроить можно почти все. Другое дело, что ядро я врядли сумею переписать. Скорректируем вопрос: "Если поставить 64-битный Linux, я смогу адресовать огромную память, но, только в том случае, если позволит система. А она позволит?"
240
10 августа 2006 года
aks
2.5K / / 14.07.2006
Ну собственно и преимущества 64-битных процесоров и операционных систем так же в том что они позволяют адресовть большие объемы памяти. Соответственно эта проблемма отпадет как для win64 так linux64. И там и там позволит выделить гораздо больше памяти. Если конечно железо позволит, иначе вся эта память будет в свопе на диске ленжать=). А пока в 32битных системах даже элементарно указатели по которым выделяется память в программе сами 32-х битные. И значит выделить им можно не больше 4 гб. В компиляторах для 64битных процессорах указатели уже 64 бита значит могут адресовать около 16 Тбайт памяти.
19K
10 августа 2006 года
ant3
7 / / 10.08.2006
дык Linux позволит приложению 10 гигов использовать? Пусть будет часть в свопе (с тормозами), я ж понимаю, что оперативная память не бесплатная, да и ограничения есть у материнских плат.
240
10 августа 2006 года
aks
2.5K / / 14.07.2006
[QUOTE=ant3]дык Linux позволит приложению 10 гигов использовать? QUOTE]
Да должен позвоить так же как и винда 64.
Собственно 64 укзатели - предпологают 16*1024 Гб памяти на адресацию ))
19K
11 августа 2006 года
ant3
7 / / 10.08.2006
Поясню, почему возникли сомнения: для обеспечения "многозадачности"
в винду запросто могут вставить лимит для каждого приложения. Одно дело - ширина адресной шины, другое - средний размер оперативки.
В любом случае, спасибо большое. Вчера наваял первый консольный "Хелло мир!", потренируюсь под виндой, потом пойду остальные грабли собирать. Еще раз спасибо.
2
11 августа 2006 года
squirL
5.6K / / 13.08.2003
вставлю свои пять копеек.
Линукс может использовать до 64 Гб адресного пространства на х86 системах.
для регулирования использования системных ресурсов используется системный вызов setrlimit
16K
12 августа 2006 года
aragaer
25 / / 28.07.2006
Сегодня игрался с памятью в линуксе...
В виртуальном пространстве любого приложения начиная с адреса 0xC000000 начинается ядро. Туда уже никто не пустит. Остались только младшие три гигабайта.

set_rlimit дает мало чего - позволяет установить для себя ограничения на размер сегмента данных. По сути - мы ставим себе границу, за пределы которой нам не дадут вылезти через brk/sbrk - вернут ENOMEM. Ставим больше предел - можно еще немножко памяти себе выделить.

Дальше забавный момент - malloc на большие участки памяти не имеет никакого отношения к сегменту данных. память выделяется где-то в конце адресного пространства, оставляя для стека около 8 мегов. Каждый последующий маллок будет выдавать куски памяти ближе к началу адресов, то есть получается как бы второй стек.
240
12 августа 2006 года
aks
2.5K / / 14.07.2006
[QUOTE=squirL]вставлю свои пять копеек.
Линукс может использовать до 64 Гб адресного пространства на х86 системах.
[/QUOTE]
Ну насамом деле такое видимо можно сделать не только в Linux. Только это уже извраты с сегментацией памяти, о которых только стали забывать )
19K
12 августа 2006 года
ant3
7 / / 10.08.2006
Практика - критерий истины. Сегодня переписал на С (пока под винду).
Осталь скормить исходник GCC"у. Говорят, нужно с правильными ключами компилить, один чел из нашего города обещал помочь с компиляцией и с дистром 64-битной слаки.
Еще раз спасибо, хороший форум!
2
12 августа 2006 года
squirL
5.6K / / 13.08.2003
гы... нет уж... ты меня цепанул. вечером накачу 32битный линукс под qemu и буду тестить. может даже разразимся статейкой. остальных тоже призываю :)
10
12 августа 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=ant3]Разработал забывный алгоритм, реализацию сделал в Delphi.[/QUOTE]
После проделанного задам вопрос, приводящий к запою: а ты использовал TBits из Classes? По сравнению с массивом Boolean-значений сокращает расход памяти в 8 раз.

Только сегодня зашел в эту тему.
19K
14 августа 2006 года
ant3
7 / / 10.08.2006
[QUOTE=Freeman]После проделанного задам вопрос, приводящий к запою: а ты использовал TBits из Classes? По сравнению с массивом Boolean-значений сокращает расход памяти в 8 раз.

Только сегодня зашел в эту тему.[/QUOTE]

Наверное заметно, что я не программист :) В студенческие годы на фортране поля считал, ОП вообще не знаю.
По моему простому рассуждению булево значение должно бы занимать один бит. Каково было мое удивление, что оно такое же, как byte (эмпирический результат). В другом форуме(у дельфийцев )спрашивал :как создать класс - наследничек от intrger, чтобы ограничить
размер переменной до бита. Меня проигнорили. Все равно не спасет, подумал я, и преписал на ся. Один черт, надо изучать.
А TBits поковыряю...
240
14 августа 2006 года
aks
2.5K / / 14.07.2006
Ну переменную размером в один бит не создать. Не бывает адресуемых едениц меньше байта. Другое дело что можно вручную реализовывать эту логику и в одной переменной хранить 8 булевых значений (как часто и делают). Исспользовать для записи и считывания отдельных бит битовые операции (&, |, >>, <<). Можно создать класс обертку для упрощения доступа или восспользоваться готовыми.
2
22 августа 2006 года
squirL
5.6K / / 13.08.2003
[quote=aks]Ну насамом деле такое видимо можно сделать не только в Linux. Только это уже извраты с сегментацией памяти, о которых только стали забывать )[/quote]
сие зовется PAE. и вовсе это не изврат :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог