|
|
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревичrgreat, Что-то не особо оно работает. В итоге делфи завис и только убивать через диспетчер. Памяти должно хватать. НяшикЭто баги компилятора И как быть? арендовать виртуальную машину с дохренищей памяти и поставить там языки с библиотеками для обработки больших массивов (((( а пока попробуйте использовать для выделения памяти https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa366887(v=vs.85).aspx VirtualAlloc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 10:12 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
makhaonда, может в этом и проблема. что памяти не хватает. что бы кусок выделить целиком. у меня схавало без вопросов. скорее всего многомерные массивы придётся делать. Ну 16 ГБ оперативы и столько же в подкачке. Сколькож ему надо? В диспетчере информация неактуальная какая-то. При том что любопытно, сделал увеличение массива по кнопке - работает, а не при инициализации, заполнил рандомами - работает (на удивление быстро забивает 400 миллионов значений). Возвращаюсь к своим "записям", делаю вместо двух переменных динамический массив, по кнопке выполняю SetLength(array, 2), вроде бы работает, подключаю процедуру для работы с массивом - программа вылетает (правда уже без краша компилятора) с формулировкой нет доступа к какой-то там ячейке памяти. При том программа вылетает не в момент увеличения массива, и не в момент первого обращения к нему, а момент инициализации процедуры в котором должны обращаться к массиву. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 10:27 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Vladimir Baskakov, Да не такие уж это даже и большие массивы, чтоб так с ними морочится, в пространственных расчетах массивы по сотни гигабайт бывают. Правда хз как там их обрабатывают. Хотя и у программ для таких расчетов обычно жесткие требования к оперативе 64-128гб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 10:32 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич, с самого начала вам предлагали БД. После можно было обрабатывать данные целиком или засасывать кусками в память и перекручивать их там. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:03 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичНу 16 ГБ оперативы и столько же в подкачке. Сколькож ему надо? В диспетчере информация неактуальная какая-то.В общем случае 32-бит процессу из этих 16 гигов достается лишь 2 гига. Остальное зависит от фрагментации. Там может быть свободно более 1 гиг, но иза фрагментации, не быть свободного куска нужного размера. И попытка его выделить потерпит неудачу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:15 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
200000000 это всего лишь 200 байт мегабайт ... Оперативной памяти у меня к примеру должно хватит 100% Та и под 64 битным компилятором тоже не работает данный код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:34 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
LocksmithPC, БД это хорошо, я даже поковырялся немного, но пока отказался от данного способа из-за слишком большого количества телодвижений ради каждой операции. Возможно позже опять к нему вернусь. Тут то вроде массив куда меньший изначального, всего около 400 миллионов значений по 4 байта (real) - по идее всего-то 1-3 гб памяти. Мучать БД ради такого не хотелось бы. white_niggerВ общем случае 32-бит процессу из этих 16 гигов достается лишь 2 гига. Остальное зависит от фрагментации. Там может быть свободно более 1 гиг, но иза фрагментации, не быть свободного куска нужного размера. И попытка его выделить потерпит неудачу Да вроде и процессор и система 64, и компилятор на 64 убедил работать. Как его (компилятор, приложение) убедить отжать в памяти более 2гБ сразу, не фрагментируя данные? Куча программ под себя и по 100ГБ забирает оперативы, и не жалуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:35 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревичпрограмма вылетает (правда уже без краша компилятора) с формулировкой нет доступа к какой-то там ячейке памяти Значит где-то косячишь с индексом/обращаешься к неинициализированной переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:36 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Няшик200000000 это всего лишь 200 байт мегабайт ... Оперативной памяти у меня к примеру должно хватит 100% Та и под 64 битным компилятором тоже не работает данный код Ну реал вроде 4(6?) байта, так что такие 800 где-то 800 мб, но всё равно не так уж и много, чтоб не хватало памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:38 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
white_niggerНужны непрерывные участки, а таких может и не быть (особенно в W10 FCU) Непрерывные участки в адресном пространстве процесса. Как FCU на это может повлиять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:39 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичНу реал вроде 4(6?) байта Довольно давно уже Real = Double. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:40 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич, О да.. Я помножить забыл 200 000 000 * 8 байт = 1600 Мбайт 8 он байт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:41 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyКак FCU на это может повлиять?По идее не должен. Хотя в FCU мелкомягкие накосячили с выделением памяти - сильная фрагментация. Может косвенно как-нить и влияет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:48 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичКак его (компилятор, приложение) убедить отжать в памяти более 2гБ сразу, не фрагментируя данные? Код для x64: Код: pascal 1. 2. 3. 4. 5. Прекрасно работает на виртуальной машине с 1Gb RAM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:51 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#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. Делфей нет. Но под FPC вроде отработало. я уж правда наизусть не помню, сколько байт в Real ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:55 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
white_niggerХотя в FCU мелкомягкие накосячили с выделением памяти - сильная фрагментация. У дельфей же свой ММ, ему системная фрагментация побоку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:55 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич, авторНу 16 ГБ оперативы и столько же в подкачке. Сколькож ему надо? В диспетчере информация неактуальная какая-то. если бы с памятью было всё так просто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:57 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyУ дельфей же свой ММ, ему системная фрагментация побоку.Ну я как бы в курсе :) Он один фиг поверх системного аллокатора, а если тот может глючить... Я не настаиваю, просто в случае FCU ничему не удивляюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 12:00 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, думаешь, что мм прямо с железом работает? посмотри хотя бы тот же fastmm: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 12:01 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
white_nigger, Как я понимаю, VirtualAlloc может просто не вернуть кусок нужного размера из-за фрагментации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 12:04 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeywhite_niggerНужны непрерывные участки, а таких может и не быть (особенно в W10 FCU) Непрерывные участки в адресном пространстве процесса. Как FCU на это может повлиять? Как минимум - смотря как дллки на пространство аллоцирированы. Хотя обычно винда их прибирает кверху, насколько я помню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 12:06 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Vladimir Baskakov, Отработало. Hello, world. 4.00000000000000E+0001 В диспетчере память - 5.7 мб Дабавим полное заполнение, for и ошибка 32 бит 64 бит Протестируй у себя Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 12:07 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
white_niggerОн один фиг поверх системного аллокатора, а если тот может глючить... Хочешь сказать, что на FCU глючит VirtualAlloc? makhaonКак я понимаю, VirtualAlloc может просто не вернуть кусок нужного размера из-за фрагментации Ты бы ещё понимал о чём говоришь... Чтобы VirtualAlloc обломался из-за фрагментации, у тебя в процессе должны быть зарезервированы участки памяти по множеству адресов, между которыми не находится достаточно свободного места. А того пространства у тебя 8TB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 12:17 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
p:=VirtualAlloc(nil,8*200000000,MEM_COMMIT ,PAGE_READWRITE); а так - сдохло. вот так p:=VirtualAlloc(nil,4*200 000 000,MEM_COMMIT ,PAGE_READWRITE); p2:=VirtualAlloc(nil,4*200000000,MEM_COMMIT ,PAGE_READWRITE); работает...... в общем, там по адресации надо посмотреть. и на крайняк резать на куски. в принципе, ну два куска. Ну что поделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 12:20 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39590666&tid=2041256]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
172ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 500ms |

| 0 / 0 |
