|
|
|
работа с большими объёмами памяти
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39476432&tid=2042104]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
180ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 455ms |

| 0 / 0 |
