думаю, здесь от языка мало зависит, а в том как оно в железе работает я не разбираюсь -- слышал только что то про фрагментацию оперативной памяти.
имеется несколько real массивов в 1e6\div1e7x4 (набор векторов в 4-хмерном фазовом пространстве, (от сотни мегабайт, до гигабайта)), в программе нужно будет за каждую итерацию (их очень много) проводить преобразования этих векторов, некоторые из них удалять, добавлять новые. промежуточные результаты не сохраняются -- то есть на каждом шаге итерации в памяти хранятся только предпоследнее и последнее состояние массивов.
что в таком случае предпочтительней, в плане удаления-добавления элементов -- делать allocatable или как они там, массивы переменного размера, или же заранее зарезервировать под каждый массив побольше памяти и завести дополнительный integer/boolean переменный массив со списком индексов векторов, содержащих полезную информацию?
интересует максимальное быстродействие, на память посрать.
максимальное быстродейсте == прямой доступ к ячейке массива.
быстрее уже не придумаешь.
а таблица индексов как раз таки призвана экономить память, уночитожая повторяющиеся элементы.
Корочи говоря засрать память куда проще, нежели загрузить процессор.
Добавлено 07-09-2011 в 13:23:
А вообще говоря итерация по гигабайтному массиву тоже дело долгое.
Приведи псведокод, как оно выглядеть должно.
вообщем действительно буду выделать большой массив, и разобъю его на отдельные подмассивы -- тогда каждый раз обходить надо будет не гигабайтный, а только эти субмассивы в которых элементов меньше, т.е полный массив обходитсья будет только один раз.
там нет повторяющихся, есть не несущие информацию: что то вроде
(
x1,vx1,vy1,vz1
x2,vx2,vy2,vz2
пустая ячаейка
x4,vx4,vy4,vz4
ещё больше пустых
)
ну вот думаю как бы записать в отдельный массив номера значащих ячеек.. по идее даже массива не надо, достаточно большого двичного числа, где 0 -- пустая, 1 -- информативная ячейка.
thambs, т.е. ты считаешь, что бежать по вспомогательному массиву с, допустим, 1-байтовыми элементами и потом адресоваться в массив с real, будет быстрее, чем просто бежать по массиву с real?
thambs писал: да мне уже на ЛОРе обяснили как надо
они же там больные все
Цитата:
thambs писал: вообщем действительно буду выделать большой массив, и разобъю его на отдельные подмассивы -- тогда каждый раз обходить надо будет не гигабайтный, а только эти субмассивы в которых элементов меньше, т.е полный массив обходитсья будет только один раз.
поздравляю! вы только что изобрели дерево.
Цитата:
thambs писал: там нет повторяющихся, есть не несущие информацию: что то вроде
гляди не вздумай от них избавляться, кучу времени потеряешь.
да я понял уже. вообщем надо будет завести внутри основного несколько вспомогательных элементов и внутри них уже описать номера значащих векторов, т-е достаточно большого бинарного числа, где 0 -- пустая ячейка, а 1 -- значимая.
//на работе 64бита и памяти хоть жопой жуй. так что не проблема.
Дядя Миша
в каком смысле избавляться? перезаписывать туда нули? небуду конечно.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
"4 ГБ адресного пространства разделены на два раздела: раздел непривилегированного режима и раздел привилегированного режима. По умолчанию, каждый из эти разделов имеет размер в 2 ГБ, хотя Вы можете изменить это, используя установки в файле BOOT.INI"
Добавлено 07-09-2011 в 23:43:
Собсно, такой же прикол получаем с 32-х битным приложением под 64-х битную ОС.
размер выделяемоей физической памяти для одного приложения ограничен разрядностью указателей. В самой-то винде адресация давным-давно (еще по-моему с первого пня) 48-битная и теоретически память может доходить до 16 терабайт.