На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> Out of memory для одномерного массива Double - каждый раз разное?, Visual Basic v.6.0.
    Эмпирическим путем 2 дня назад вывел максимальное число элементов в массиве до переполнения: 50102267. Сегодня - этот массив оказался неспособен к расширению даже до 33554432.

    Что происходит?
      :lool:
      Вчера на машине ехал 150 - нормально. А сегодня на 20 уже трясёт так, что того и гляди развалится... а то, что вчера автобан, а сегодня просёлок, с машиной ну никак не связано.
      Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
      Есть претензии ко мне как к участнику? да ради бога.
      Не нравятся мои ответы? не читайте их.
      В общем, берегите себя. Нервные клетки не восстанавливаются.
        Цитата Сергей85 @
        Что происходит?

        Фрагментация
        char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
        for (size_t i=0;i<cc;i++)??<cout<<static_cast<char>((out??(i??)??'89));??>cout<<endl;


        user posted image >> Чат Исходников в Скайпе << Не проходим, а заходим!

        user posted image
          Цитата B.V. @
          Цитата Сергей85 @
          Что происходит?

          Фрагментация

          А почему происходит это? У меня 32 гига оперативки; ну не может ему не хватать разместить этот массив целым где-нибудь на 30-м гигабайте.

          Добавлено
          Цитата Akina @

          Я не менял рабочую машину и кол-во запускаемых программ. Ребут тоже не помогает.
            Почитайте здесь:
              Цитата __Sergey__ @

              Мне для массива память надо заранее зарезервировать - и смогу запихнуть хоть 60миллионов значений?
                Цитата Сергей85 @
                Мне для массива память надо заранее зарезервировать - и смогу запихнуть хоть 60миллионов значений?

                чем отличается виртуальная память от физической?
                  Цитата __Sergey__ @

                  В моем случае это не важно: файл подкачки отсутствует.
                    Цитата __Sergey__ @
                    чем отличается виртуальная память от физической?

                    Цитата Сергей85 @
                    В моем случае это не важно: файл подкачки отсутствует.

                    :no:
                    У каждого процесса\приложения свое собственное виртуальное адресное пространство (АП), в котором выделенные блоки памяти (регионы адресов) проецируются ОС на физ.память (ОЗУ или файл подкачки). Обычному 32-битному процессу доступно всего лишь 2 Гб виртуальных адресов независимо от разрядности ОС и размера ОЗУ. Причем в этих же 2 Гб размещаются не только пользовательские данные, но и код самого приложения и всех используемых им (явно или не явно) системных dll. Примеры распределения памяти процесса можно посмотреть в таблицах 13-2 и 13-3 по приведенной выше ссылке на Рихтера. Посмотреть распределение памяти в собственной программе можно с помощью утилиты VMMap от М.Руссиновича. Основным параметром, определяющим возможность выделения большого массива данных, является Free\Largest - размер свободного региона виртуальной памяти максимального размера. Если он меньше требуемого размера массива, то получишь Out of memory. Посмотри, чему у тебя равно это значение и изменяется ли оно от запуска к запуску
                      Цитата Сергей85 @
                      В моем случае это не важно: файл подкачки отсутствует.

                      :facepalm:
                      Цитата TheMachine @
                      т.е. в общем случае вы правы конечно, а мне надо спать больше а пить меньше
                        Цитата leo @

                        Ну, пусть есть некая флуктуация некоей памяти при каждой перезагрузке. Но как проблему-то решить? Нужно массив будет 2^25 создать - как это сделать? Уж очень близко я к этому пределу подобрался. П.с.: 2^24 работают на всех машинах; проверил даже на старье 2ГБ RAM.
                          Цитата Сергей85 @
                          Но как проблему-то решить? Нужно массив будет 2^25 создать - как это сделать?

                          Чтобы решить проблему, нужно понять из-за чего она возникает.
                          Одномерный массив double из 225 элементов имеет размер всего лишь 268 Мб - это слишком мало, чтобы облом мог происходить из-за начальной фрагментации АП из-за загрузки всевозможных dll. Скорее всего ты что-то не договариваешь - возможно у тебя не один массив, а несколько, или память под массив ты выделяешь не однократно, а несколько раз увеличиваешь его размер через Redim Preserve, или еще что ...

                          Цитата Сергей85 @
                          проверил даже на старье 2ГБ RAM

                          Размер RAM тут роли не играет - при отсутствии клинической фрагментации АП можно и при 2Гб RAM выделить непрерывный кусок памяти до 1.5-1.7 Гб
                            Цитата leo @



                            6 Dim dNumbers_Array() As Double, dFormula_Array() As Double,
                            ...
                            ReDim dFormula_Array(2 ^ (UBound(dNumbers_Array) + 1) - 2) 'Максимальная размерность массива (сумма по всем направлениям) - 50102267. 33554432 соответствует 2^25 как максимальному количеству анализируемых чисел. Значение "все нули" не используется.


                            Всё.
                              Цитата leo @

                              Сделал несколько массивов 2^23 + Copymemory для них. Не вылетает ничего.

                              Я не понимаю, что мне мешает. Свободной RAM - десятки гигабайт.
                                Цитата Сергей85 @
                                Я не понимаю, что мне мешает. Свободной RAM - десятки гигабайт.

                                Сколько можно повторять, что размер RAM тут никакой роли не играет. Приложение работает не с RAM, а со своими виртуальными адресами, коих у 32-битного процесса всего лишь 2Гб, и часть из них занята различными служебными данными. Скачай VMMap по вышеприведенной ссылке и посмотри, что там у тебя творится с занятыми и свободными адресами.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                [ Script Execution time: 0,1288 ]   [ 15 queries used ]   [ Generated: 28.02.17, 05:44 GMT ]