|
|
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
как можно выделить объём памяти более 2 гб? без ключа LARGEADDRESSAWARE выделяется менее 1 гб, с ключом - 2.1 гб. как выделять память, неважно, хоть через SetLength, хоть через VirtualAlloc. fastmm, и т.д. не влияет (delphi 7) какие ещё есть способы для работы с данными более 2 гб, кроме перехода на 64 бит? все данные должны быть в памяти одновременно, для скорости работы. по идее, для 32-битного приложения предел - 4 гб. хотелось бы иметь возможность получить хотя бы все 4 (т.е., 3 с чем-то). В 64-bit Windows для 32-bit процесса доступно: 2ГБ и 4ГБ (если приложение компилируется с параметром IMAGE_FILE_LARGE_ADDRESS_AWARE) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 10:08:32 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
Address Windowing Extensions (AWE) Все есть в MSDN (AWE API): http://msdn.microsoft.com/library/en-us/memory/base/address_windowing_extensions.asp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 10:11:01 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 10:11:39 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
user_aкакие ещё есть способы для работы с данными более 2 гб, кроме перехода на 64 бит? На дворе уже пардон, 2017 год, пора бы на 64 бита перейти, если нужно с большими объемами работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 10:32:11 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
user_a, никак. http://www.transl-gunsmoker.ru/2009/06/3gb-1-3.html http://www.transl-gunsmoker.ru/2009/06/3gb-2_11.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 13:19:25 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
GunSmokeruser_a, никак. http://www.transl-gunsmoker.ru/2009/06/3gb-1-3.html http://www.transl-gunsmoker.ru/2009/06/3gb-2_11.html AWE жешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 13:22:42 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
user_a, Возможно ТСу поможет эта команда запускаем cmd и вводим bcdedit /set Increaseuserva 3072 (вместо 3072 можно ввести любое число) Что бы вернуть все обратно нужно ввести: bcdedit /deletevalue increaseuserva ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 13:51:41 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
defecator, мне показалось он хочет одним куском, раз упомянул SetLength. AWE требует привилегии Lock Pages in Memory, что обычным пользователям (и даже админам) не дают. Если в системе есть куча оперативной памяти, то гораздо проще написать 64-битное приложение, благо сегодня это возможно в Delphi. С другой стороны, проецируемые в память файлы не требуют дополнительных привилегий и могут быть сколь угодно большими (ограничены только файлом подкачки/местом на диске). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 15:34:37 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
ПаWWWлОдАрЕц, в 64-битной ОС смысла в этом параметре нет. 32-битным приложениям доступно 4 гигабайта. http://www.gunsmoker.ru/2011/04/windows-spin-off.html#n7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 15:38:02 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
GunSmokerdefecator, мне показалось он хочет одним куском, раз упомянул SetLength. user_aкак выделять память, неважно, хоть через SetLength, хоть через VirtualAlloc. GunSmokerAWE требует привилегии Lock Pages in Memory, что обычным пользователям (и даже админам) не дают. Не очень ясно про этот момент, так как у меня до сих пор работает такая софтина под WinXP и Win7 без проблем, писаная ещё в 2012-м году на D7. GunSmokerЕсли в системе есть куча оперативной памяти, то гораздо проще написать 64-битное приложение, благо сегодня это возможно в Delphi. Конечно, проще. Но если есть определённые ограничения - например, переход на новую версию Delphi невозможен - то приходится выкручиваться на том, что есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 15:40:32 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
А, сейчас поглядел в код. Я там сам пытаюсь эту привилегию установить. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 15:45:31 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
defecator, ну так посмотри, что там с привилегиями-то. У меня, к примеру, всюду AllocateUserPhysicalPages завершается с ERROR_PRIVILEGE_NOT_HELD. P.S. Ты же понимаешь, что AWE, фактически, отключает paging и поэтому предназначен для приложений-серверов, которые запускаются на машине, специально выделенной исключительно для работы этого приложения? Вроде SQL-сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 15:59:27 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
defecatorЯ там сам пытаюсь эту привилегию установить.ЕМНИП, если в политиках нет разрешения на "закрепление страниц", то процесс не сможет установить/включить эту привилегию. А по-умолчанию она вроде отключена, т.е. нужны доп. действия со стороны администратора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 15:59:32 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
Фик его знает, можно подебажить, но софтина работает же как-то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 16:14:46 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
А меня вот интересует вопрос - а назачем 4 и больше Гб в память пихать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 17:39:26 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
DarkMaster, Для скорости. Разве есть еще варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 17:46:24 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
user_a, Для 32 бит и одновременно никак. Но можно организовать большой файл и мапить из него куски. Ведешь условно говоря кеш, где учитываешь какие части маплены и куда и пересчитываешь свой большой условный указатель в номер куска и в физическое смещение внутри этого куска, получаешь текущий физический адрес. Если данные расположить относительно удачно, чтобы было много попаданий в мапленные куски, то может и не слишком тормознет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 17:58:04 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
сделал двухмерный массив, вместо одномерного. выделяются несколько больших кусков, а при обращении пересчитывается одномерный указатель в двухмерный. так можно выделить где-то до 3-х гб. до конца - не пробовал. если уж не будет хватать, то, может, и придётся думать о переходе на 64 бит. на самом деле, даже на пересчёте указателя из одномерного в двухмерный, теряется производительность - процентов 10, но всё-таки. там не просто линейный цикл, который можно бы было заменить на два вложенных цикла, а иногда возможно чтение из произвольного места, поэтому приходится пересчитывать указатель на каждой итерации. к тому же, если нужно обратиться к предыдущему элементу массива, а текущий - является первым (нулевым) элементом в очередном "куске", то для получения предыдущего - недостаточно отнять 1, а он должен быть последним элементом в предыдущем "куске". помня о не всегда линейном доступе, значения с предыдущей итерации не всегда можно запомнить. даже пробовал, общий указатель - integer, и из него, предположим, 25 бит использовать на внутренний массив, а 6 - на внешний, тогда можно получать из указателя сразу 2 значения, но получилось в несколько раз медленнее. делал так: inner:=a and $1FFFFFF; outer:=(a shr 25) and $3F; может, бинарные операции - слишком медленные, либо я чего-то не понимаю. насчёт 64 бит - помня о том, сколько занимают новые версии delphi, как-то не хочется. если новая версия весит в 10, к примеру, раз больше (а на самом деле, ещё больше), значит, в ней, что, в 10 раз больше функций? значит, эффективность занимаемого пространства - сильно уменьшилась. предположим, взять delphi... 7, которая занимает, там, 300 метров, и позволяет писать законченные приложения, или новые версии, которые - несколько Гб. если оставить разработку только для Win32, вот что там занимает место? новые компоненты? и во сколько они раз больше? и всё это занимает код? это сколько же нужно кода - тогда можно бы было вместить среды разработки для нескольких различных архитектур в то же самое место, а не в "ещё больше". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 13:06:05 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
Двумерный массив логично было бы обрабатывать двумя циклами. outer:=a shr 25; //это лишнее and $3F; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 13:19:41 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
Еще в порядке извращения: На 64 битной OS каждый процесс может получить эти самые 2-3 гига. Создай кластер из несколькиз 32 битных процессов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 13:56:19 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
rgreat, Кластерный менеджер памяти напишешь сам. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 13:58:57 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
rgreatrgreat, Кластерный менеджер памяти напишешь сам. ;) самый быстрый в мире (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 14:14:31 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
defecator, Понятно дело что самый быстрый. Он же один такой будет. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 14:23:40 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
Майнеры потянулись? ) По поводу 'зачем'? Случаи всякие бывают. 8 гиг, занимаемые станциями, у нас - рутина. 64 бита, само собой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 14:33:31 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
а под 64 бит же тоже может не оказаться непрерывного куска в несколько ГБ? тогда в чём разница, именно в этой части? т.е., всё равно придётся создавать массив "по частям". а ещё в delphi переменная не может быть более 2 гб. так что "одним куском" и так бы не получилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 20:23:35 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
user_aа под 64 бит же тоже может не оказаться непрерывного куска в несколько ГБ? тогда в чём разница, именно в этой части? т.е., всё равно придётся создавать массив "по частям". а ещё в delphi переменная не может быть более 2 гб. так что "одним куском" и так бы не получилось. Вы хотите странного. Зачем вам непрерывный кусок памяти более 2-х гб да еще "в одной переменной" (даже не знаю что бы это значило)? P.S. Поставьте на сервер 512 Гб оперативки. Все шансы на то что 4 гига непрерывным куском вы найдете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 20:42:25 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. Выделился массив на 5 гигов. Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 21:06:00 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
ну, тот же динамический массив - одна переменная. а если задавать тип как одномерный массив, а другой тип, как одномерный массив элементов первого типа, то переменная 2-го типа будет хранить указатели на переменные 1-го типа, каждые из которых не могут превышать 2 гб, но в целом "массив" может превышать 2 гб. а если задать сразу двухмерный массив в одном типе данных, то весь массив не сможет превышать 2 гб. это в delphi 32-бит, в смысле. и в каком виде предлагается хранить линейную последовательность данных большого объёма, чтобы по-правильному? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 21:32:40 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
rgreat, попробуй, к слову, в него залить 5 гиг. получится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 22:15:20 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
user_a, ну,тот же динамический массив - одна переменная.да, одна переменная - глобальная или на стеке, размер которой SizeOf(Pointer). И в эту переменную, после удачного вызова GetMem или SetLength, будет записан адрес (начало) виртуального адресного куска нужной длины. и в каком виде предлагается хранить линейную последовательность данных большого объёма,на диске в файле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 22:23:39 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
makhaonrgreat, попробуй, к слову, в него залить 5 гиг. получится? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ';245;246;247;248;249;250;251;252;253;254;255' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 22:34:22 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
i : Int64; конечно-же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 22:35:58 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
В памяти - 5 с лишним гигов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 22:36:38 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
user_aи в каком виде предлагается хранить линейную последовательность данных большого объёма, чтобы по-правильному?В том, который нужен по условию задачи. Если это не мешает быстродействию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 22:39:15 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
На очень больших объемах я бы посоветовал рекорды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 22:40:17 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
user_aэффективность занимаемого пространства - сильно уменьшилась. https://kent.dl.sourceforge.net/project/freepascal/Win32/3.0.2/fpc-3.0.2.i386-win32.cross.x86_64-win64.exe Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 22:59:03 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
user_aа под 64 бит же тоже может не оказаться непрерывного куска в несколько ГБ? Крайне маловероятно. Там теоретические 16 эксабайт, с практическим пределом в 8 Тб для user mode (надо проверить, может в последних версиях Windows уже подняли). user_aа ещё в delphi переменная не может быть более 2 гб Смотря какая переменная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 23:50:04 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
В этом вопросе главное не путать физическую память с виртуальной памятью процесса. Под х64 нет проблем выделить большой непрерывный кусок. Размер будет ограничиваться только размером подкачки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 13:13:02 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
Barmaley57, у некоторых программ с этим проблемы. Я столкнулся с таким, когда эмулятору андроида (во времена ХЕ5) задал устройство с 512мб памяти, и он при старте псевдо-устройства не мог выделить кусок памяти. Хотя на 16 гиг RAM было свободно больше половины. Помогала только перезагрузка ОС и сразу запуск эмулятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 15:13:44 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
Barmaley57В этом вопросе главное не путать физическую память с виртуальной памятью процесса. Под х64 нет проблем выделить большой непрерывный кусок. Размер будет ограничиваться только размером подкачки. В ряде случаев, на Windows, нифига ничего не выделяется. Почему и в чем у кого проблемы, фиг его знает. Сталкивался на Windows 7, комп с RAM 32 Gb, при попытке запускать много приложений иногда около 6-8 Gb под Java JVM одним куском Windows выделить не мог. Хотя и виртуальной и даже просто free памяти (32 Gb - использованное место) было достаточно. На компе запускалась пара виртуалок в VmWare Player'е + JDeveloper + пара инстанцев WebLogic + Oracle Database. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 20:13:10 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevВ ряде случаев, на Windows, нифига ничего не выделяется. Почему и в чем у кого проблемы, фиг его знает. Подкачка,проецируемые в память файлы, кэш... Где-то должен быть затык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 20:26:19 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
Мешала фрагментация скорей всего. Нужен-то непрерывный кусок в 6-8 гб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 20:26:57 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
rgreatМешала фрагментация скорей всего. Нужен-то непрерывный кусок в 6-8 гб.Не помню точно, но есть флаги для выделения памяти сверху/снизу. Может снизу был облом из-за фрагментации. Но сверху никто не мешает замапить кусок. В х64 сколько адресного пространства - попой ешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 20:29:28 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
Я к тому, что утверждение В этом вопросе главное не путать физическую память с виртуальной памятью процесса. Под х64 нет проблем выделить большой непрерывный кусок. Размер будет ограничиваться только размером подкачки. не совсем истинное. Проблемы могут быть. В чем и у кого... ОС, кривые руки разработчиков, что-то еще... не столь важно. В общем, не стал бы относить решение "выделить дофига ГигаБайт одним куском" к бест практикс. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 20:33:44 |
|
||
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, ну дык авторРазмер будет ограничиваться только размером подкачки А так-то да. Какой-нить орацл забабахает mmf, выжрав всю подкачку и привет. А теоретически - проблем нет. Для х86 нельзя выделить 5 гигов даже теоретически, а для х64 - можно. Вот я о чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 21:01:34 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2042104]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
190ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 465ms |

| 0 / 0 |
