Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Выделение динамической памяти


Автор: Ivan182 15.5.2008, 13:51
malloc позволяет выделить память до 2-х Гб. 
как выделить память больше, например, 8Гб? система debian, проц 32-х разрядный.
unix-админ включил опцию, позволяющую "эмулировать" 64-х разрядное адресное пространство, то есть теоретически система может выделить 8 Гб. 
проблема видимо в с, а точнее в реализации функции malloc. smile 
подскажите, плиз. 

Автор: baldina 15.5.2008, 15:40
проблема видимо в том, что тебе нужен компилер 64-разрядного кода, тогда твой size_t будет другой и malloc соответственно

Автор: MAKCim 15.5.2008, 18:08
Цитата(Ivan182 @  15.5.2008,  13:51 Найти цитируемый пост)
unix-админ включил опцию, позволяющую "эмулировать" 64-х разрядное адресное пространство, то есть теоретически система может выделить 8 Гб. 

бред

может имелось в виду включение PAE?
если да, то PAE всего лишь расширяет разрядность физического адреса до 36 (Intel) или 40 (AMD) бит, что позволяет адресовать > 4Гб физической памяти
однако в любом случае на 32-х разрядной системе размер линейного адресного пространства (линейного адреса) ограничен 32-мя разрядами
поэтому даже если включен PAE и общий размер физической памяти > 4Гб, то выделить больше [2/3]Гб - x байт не получится (больше просто отобразить не получится)

решение состоит в использовании концепции AWE, точнее в ее реализации (через модуль ядра)  smile 
но даже в этом случае плоского 8-ми гигабайтного линейного буфера не будет

Автор: baldina 15.5.2008, 23:08
да нет решений для стандартного С на 32-разрядной платформе - по определению.

PAE на клиентское приложение вообще не влияет.
AWE позволяет приложению использовать больше памяти, но не средствами языка, а через AWE API.

MAKCim, AWE под *nix? Я думал это исключительно мелкосовтовский API, а в юниксах - mmap()

Автор: MAKCim 16.5.2008, 00:12
Цитата(baldina @  15.5.2008,  23:08 Найти цитируемый пост)
AWE под *nix? Я думал это исключительно мелкосовтовский API, а в юниксах - mmap() 

когда научимся внимательно читать?  smile 
Цитата(baldina @  15.5.2008,  23:08 Найти цитируемый пост)
PAE на клиентское приложение вообще не влияет.

смотря с какой стороны посмотреть
Цитата(baldina @  15.5.2008,  23:08 Найти цитируемый пост)
да нет решений для стандартного С на 32-разрядной платформе - по определению.

по определению все 8Гб отобразить не получится, а использовать можно (частями)
решение было предложено выше

Автор: GrayCardinal 17.5.2008, 15:24
Ivan182
А можно узнать чем не устраивает простой большой файло ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)