Re[4]: Как выделить одному приложению 5 ГБ памяти?
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 17.02.08 07:17
Оценка:
Здравствуйте, Uzumaki Naruto, Вы писали:

UN>5Гб за раз — это другой вопрос... =) Может я не понял проблему человека. Хотя мне до сих пор не понятно, зачем выделять столько памяти да и еще одним блоком? Он че ядерный взрыв моделирует?


Случаи разные бывают... Я разрабатывал и отлаживал приложение в области визуализации данных, выделяя 40 Гб памяти....
Re: 4GB RAM на 32х битах - недостижимая цель?
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 17.02.08 07:27
Оценка:
Здравствуйте, Valery A. Boronin, Вы писали:

S_N>> Зачем нужны были эти все шаги? Все просто — 32-разрядное приложение не может адресовать более 4 гигабайта оперативной памяти (2 в степени 32 — даст около 4 млрд байт), а на деле — не более 3 гигабайт винда даст адресовать.


VAB>проблема же с 5 Гб как правильно в ветке уже заметили — скорее всего в неиспользовании правильного API ибо дефолтная реализация new или чем Вы там выделяли память в Вашем компиляторе, похоже, незаточена под Ваши требования.

Нет. К сожалению, спрашивающий недостаточно разбирается в правилах программирования на Си++ в целом, а не только в вопросах 64-битности. И new и malloc — все замечательно работает.

VAB>Так что я бы тоже рекомендовал почитать Рихтера и MSDN поновее (онлайн) про VirtualAlloc, причем на Висте и дальше я бы попробовал с флажком MEM_LARGE_PAGES.

Насчет Рихтера Вы абсолютно правы. Прежде чем обвинять Windows или компилятор, в неспособности выделять память, стоит почитать классиков.
Re: Как выделить одному приложению 5 ГБ памяти?
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 17.02.08 07:39
Оценка: 19 (3)
Здравствуйте, Skipper_N, Вы писали:

S_N> Чтобы работало мое приложение (алгоритм) — нужно 5 ГБ памяти, меньше никак.

S_N> ......
S_N> Как справиться с такой проблемой? Неужели до сих пор нельзя выделить памяти 5 ГБ одному приложению ? Я шокирован буду если так... На дворе 2008 год наступает...

Прочитал я этот тред и стало мне грустно. Грустно по следующей причине. Microsoft слишком хорошо убедил разработчиков, что для создания 64-битного приложения достаточно изменить настройку проекта. Между тем корректное написание 64-битных приложений требует определенной квалификации и знаний. Для тех, кто собирается познакомиться с особенностями разработки 64-битных приложений предлагаю следующие статьи (на руссом).
Андрей Карпов. Забытые проблемы разработки 64-битных программ.
Андрей Карпов, Евгений Рыжков. 20 ловушек переноса Си++ — кода на 64-битную платформу
Андрей Карпов. Проблемы тестирования 64-битных приложений
Андрей Карпов. 64 бита для Си++ программистов: от /Wp64 к Viva64.
Евгений Рыжков. Проблемы 64-битного кода на примерах

А здесь можно найти ссылки на многие другие статьи по данной тематике (но уже на английском языке).
http://www.viva64.com/links.php
Re[5]: Как выделить одному приложению 5 ГБ памяти?
От: Аноним  
Дата: 17.02.08 08:16
Оценка: :)
Здравствуйте, Analytic2007, Вы писали:

A>Случаи разные бывают... Я разрабатывал и отлаживал приложение в области визуализации данных, выделяя 40 Гб памяти....

с помощью new?
Re: Как выделить одному приложению 5 ГБ памяти?
От: rus blood Россия  
Дата: 17.02.08 13:16
Оценка:
Здравствуйте, Skipper_N, Вы писали:

S_N> Чтобы работало мое приложение (алгоритм) — нужно 5 ГБ памяти, меньше никак.


Флаг линкера стоит?
/LARGEADDRESSAWARE:YES
Имею скафандр — готов путешествовать!
Re[3]: Как выделить одному приложению 5 ГБ памяти?
От: Sergey Chadov Россия  
Дата: 17.02.08 14:52
Оценка:
Здравствуйте, Analytic2007, Вы писали:


SH>>Как память выделяешь? VirtualAlloc[Ex] попробуй.


A>Не смущайте народ.

A>Не стоит использовать такие тяжеловесные вещи, если хватит простого оператора new.
A>Все отлично выделяется и работает:
A>
A>  size_t arraySize = 5368709120ULL;
A>  char *array = new char [arraySize];
A>  for (size_t i = 0; i != arraySize; ++i)
A>    array[i] = 1;
A>


Я бы не рекомендовал выделять такие объемы по new. new сводится в HeapAlloc, который ну никак не предназначен для выделения блоков такого объема(хотя, выделить-то он его выделит скорее всего, но можно словить пенальти по производительности в самый неожиданный момент).
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[2]: Как выделить одному приложению 5 ГБ памяти?
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 17.02.08 15:53
Оценка: +1
Здравствуйте, rus blood, Вы писали:

S_N>> Чтобы работало мое приложение (алгоритм) — нужно 5 ГБ памяти, меньше никак.


RB>Флаг линкера стоит?

RB>/LARGEADDRESSAWARE:YES

А причем тут /LARGEADDRESSAWARE:YES ?
В 32-битной программе все равно 5 ГБ просто так не выделить. А в 64-битной никаких проблем нет.

p.s.
Вот еще одна статья на тему 64-бит. Там и про /LARGEADDRESSAWARE:YES есть.
64-bit programming for Game Developers
Re[6]: Как выделить одному приложению 5 ГБ памяти?
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 17.02.08 16:05
Оценка:
Здравствуйте, Аноним, Вы писали:

A>>Случаи разные бывают... Я разрабатывал и отлаживал приложение в области визуализации данных, выделяя 40 Гб памяти....

А>с помощью new?

Там использовались функции malloc. Выделялось не одним блоком. Одним блоком надобности пока не было.

Хотя я и не понимаю, чем Вас смущает выделение 40GB памяти одним блоком? И чем смущает, если сделать это через new?
Re[4]: Как выделить одному приложению 5 ГБ памяти?
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 17.02.08 16:17
Оценка:
Здравствуйте, Sergey Chadov, Вы писали:

SH>>>Как память выделяешь? VirtualAlloc[Ex] попробуй.

A>>Не смущайте народ.
A>>Не стоит использовать такие тяжеловесные вещи, если хватит простого оператора new.
A>>Все отлично выделяется и работает:
A>>
A>>  size_t arraySize = 5368709120ULL;
A>>  char *array = new char [arraySize];
A>>  for (size_t i = 0; i != arraySize; ++i)
A>>    array[i] = 1;
A>>


SC>Я бы не рекомендовал выделять такие объемы по new. new сводится в HeapAlloc, который ну никак не предназначен для выделения блоков такого объема(хотя, выделить-то он его выделит скорее всего, но можно словить пенальти по производительности в самый неожиданный момент).


Пожалуйста, расскажите более подробно. Я не разобрался в проблеме, о которой Вы говорите.
Re[5]: Как выделить одному приложению 5 ГБ памяти?
От: Sergey Chadov Россия  
Дата: 17.02.08 17:10
Оценка:
Здравствуйте, Analytic2007, Вы писали:


SC>>Я бы не рекомендовал выделять такие объемы по new. new сводится в HeapAlloc, который ну никак не предназначен для выделения блоков такого объема(хотя, выделить-то он его выделит скорее всего, но можно словить пенальти по производительности в самый неожиданный момент).


A>Пожалуйста, расскажите более подробно. Я не разобрался в проблеме, о которой Вы говорите.


Проблемы как таковой нет. Просто куча предназначена(и оптимизирована) для размещения относительно небольших объектов, для чего в ней _поверх_ памяти, выделенной по VirtualAlloc навернуты некоторые структуры данных.
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[7]: Как выделить одному приложению 5 ГБ памяти?
От: Аноним  
Дата: 17.02.08 19:41
Оценка:
Здравствуйте, Analytic2007, Вы писали:

A>Хотя я и не понимаю, чем Вас смущает выделение 40GB памяти одним блоком? И чем смущает, если сделать это через new?

смущает тем, что это heap
имхо heap для этого не очень хорош
Re[8]: Как выделить одному приложению 5 ГБ памяти?
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 17.02.08 19:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Analytic2007, Вы писали:


A>>Хотя я и не понимаю, чем Вас смущает выделение 40GB памяти одним блоком? И чем смущает, если сделать это через new?

А>смущает тем, что это heap
А>имхо heap для этого не очень хорош

ПОЧЕМУ ? (Желательно со ссылками на статьи/документацию)
Re[6]: Как выделить одному приложению 5 ГБ памяти?
От: Аноним  
Дата: 17.02.08 19:54
Оценка:
Здравствуйте, Sergey Chadov, Вы писали:

SC>Проблемы как таковой нет. Просто куча предназначена(и оптимизирована) для размещения относительно небольших объектов, для чего в ней _поверх_ памяти, выделенной по VirtualAlloc навернуты некоторые структуры данных.


Странно, не в стеке же выделять несколько гигабайт, ведь размер стека указывается при компиляции и он, кажется около мегабайта.

Или есть кроме стека и кучи еще что-то?
Re[6]: Как выделить одному приложению 5 ГБ памяти?
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 17.02.08 20:02
Оценка: :)
Здравствуйте, Sergey Chadov, Вы писали:

SC>>>Я бы не рекомендовал выделять такие объемы по new. new сводится в HeapAlloc, который ну никак не предназначен для выделения блоков такого объема(хотя, выделить-то он его выделит скорее всего, но можно словить пенальти по производительности в самый неожиданный момент).


A>>Пожалуйста, расскажите более подробно. Я не разобрался в проблеме, о которой Вы говорите.


SC>Проблемы как таковой нет. Просто куча предназначена(и оптимизирована) для размещения относительно небольших объектов, для чего в ней _поверх_ памяти, выделенной по VirtualAlloc навернуты некоторые структуры данных.


Ну вот по поему внутреннему ощущению для 64-битной системы 5 гигабайт совсем небольшой объект.
Можете пояснить мысль, которую Вы хотите донести, ссылкой на статью или иной документ? (Перечитать всего Рихтера просьба не предлагать Буду признателен.
Re[7]: Как выделить одному приложению 5 ГБ памяти?
От: Sergey Chadov Россия  
Дата: 17.02.08 20:04
Оценка:
Здравствуйте, <Аноним>, Вы писали:


А>Или есть кроме стека и кучи еще что-то?


Есть VirtualAlloc, который является основным механизмом выделения памяти в Windows. Куча строится поверх памяти, выделенной VirtualAlloc(ну или точнее, одной из функций, для которых VirtualAlloc является оберткой).
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[7]: Как выделить одному приложению 5 ГБ памяти?
От: Sergey Chadov Россия  
Дата: 17.02.08 20:24
Оценка:
Здравствуйте, Analytic2007, Вы писали:


SC>>Проблемы как таковой нет. Просто куча предназначена(и оптимизирована) для размещения относительно небольших объектов, для чего в ней _поверх_ памяти, выделенной по VirtualAlloc навернуты некоторые структуры данных.


A>Ну вот по поему внутреннему ощущению для 64-битной системы 5 гигабайт совсем небольшой объект.

Для системы — может быть. Для кучи — не знаю, возможно что и многовато.

A>Можете пояснить мысль, которую Вы хотите донести, ссылкой на статью или иной документ? (Перечитать всего Рихтера просьба не предлагать Буду признателен.


Я, собственно говоря, просто исхожу из своего опыта написания распределителей памяти. "Серебяной пули" не бывает. И если куча хорошо себя ведет при распределении большого количества маленьких объектов(что вообще-то для нее желательно, пооскольку именно так ей в основном и пользуются), то часто такая куча неадекватно ведет себя с большими объектами(точнее даже со смесью больших и маленьких объектов). Насколько неадекватно ведет себя виндовая куча, да еще на 64-битной винде я сказать не могу, но просто из соображений здравого смысла(то есть пока тесты не покажут обратного) я бы поостерегся выделять такие здоровые блоки в той же куче, где живут все остальные динамические объекты. Вполне возможно, что для некоторых сценариев использования виндовая куча покажет хорошие результаты, но по-умолчанию я бы все-таки воспользовался VirtaulAlloc/
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[3]: Как выделить одному приложению 5 ГБ памяти?
От: rus blood Россия  
Дата: 18.02.08 08:29
Оценка:
Здравствуйте, Analytic2007, Вы писали:

A>А причем тут /LARGEADDRESSAWARE:YES ?

Всякое бывает, может быть, у топикстартера неправильные параметры проекта.

Лучше скажи насчет этого
Автор(ы): Don Clugston
Дата: 27.07.2005
В данной статье предоставлен исчерпывающий материал по указателям на функции-члены, а также приведена реализация делегатов, которые занимают всего две операции на ассемблере.
.
Как обстоят дела с указателями на функции в свете 64 бит ?
Имею скафандр — готов путешествовать!
Re[4]: Как выделить одному приложению 5 ГБ памяти?
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 18.02.08 11:06
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Лучше скажи насчет этого
Автор(ы): Don Clugston
Дата: 27.07.2005
В данной статье предоставлен исчерпывающий материал по указателям на функции-члены, а также приведена реализация делегатов, которые занимают всего две операции на ассемблере.
.

RB>Как обстоят дела с указателями на функции в свете 64 бит ?

К сожалениею ничего интересного сказать не могу. Думаю все осталось, как и было.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.