На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> C#. Не получается создать массив размером более 2Gb
    Операционка WindowsServer2003 64 битный

    MSVisualStudio2005 C#

    Пример создания массива размером немного меньше чем 2 гигабайта.

    ExpandedWrap disabled
      using System;
      using System.Collections.Generic;
      using System.Text;
      namespace First
       
      {
      class Program
      {
      static void Main(string[] args)
      {
      long N;
      N = 1024;
      N = N * 1024;
      N = N * 1024;
      N = N * 2 - 80;
       
      Console.WriteLine(N);
      Console.WriteLine((1.0 * N) / 1024.0 / 1024.0 / 1024.0);
       
      byte[] mass = new byte[N];
      for (int i = 0; i < N; i++) mass[i] = 10;
      Console.ReadLine();
      }
      }
      }




    Меня интересует такой вопрос: почему не получается создать массив размером превышающим два гигабайта. При попытке создания такого массива получаю сообщение OutOfMemoryException. Можно создать три массива по 1.5 гига. Но один больше двух не получается. В чем тут дело?
    Сообщение отредактировано: Tetsuzin -
      потому что размер размерностей массивов ограничен величиной типа Int32 (т.е. 2^31-1)
        Цитата Viper @
        потому что размер размерностей массивов ограничен величиной типа Int32 (т.е. 2^31-1)
        это ажн 4294967295 элементов. А массив в примере создается размером всего лишь 2147483568.
          arbuzov, как ты считал, ведь 2^31-1 = 2147483647, сеорее всего ты и отрицательные числа от int32 взял, но индексы то не могут быть отрицательными
            Цитата Viper @
            потому что размер размерностей массивов ограничен величиной типа Int32 (т.е. 2^31-1)

            Но система то 64 бита. В той же VS2005 интел фортран создает массив размером 16 гигов, без проблем.
              Цитата Tetsuzin @
              Но система то 64 бита
              Int32 он и в африке Int32 хоть в 128 битной операционке..
              Цитата Pit-Bul @
              как ты считал, ведь 2^31-1 = 2147483647
              на каркуляторе :)
                Тут дело не в величине размерностей массивов.
                Если массив содержит вещесвенные числа с двойной точностью (8 байт), то массив с 200 миллионами элементов получается создать (1.5 гига) а вот 300 миллионами нет (2.2 гига).
                Сообщение отредактировано: Tetsuzin -
                  А фреймворк, собственно, 64-битный или 32-битный? Их же там два.
                    Цитата Tetsuzin @
                    Меня интересует такой вопрос: почему не получается создать массив размером превышающим два гигабайта

                    Интересно, а куда он поместиться? Например если ОЗУ - 512Мб и файл подкачки 1 Гб
                      Цитата 2005fs @
                      Например если ОЗУ - 512Мб
                      эх.. бедность бедность :'(
                      Цитата 2005fs @
                      и файл подкачки 1 Гб
                      у меня вин2003сервер 32бит разрешает 3гига подкачки :tong: (не обижатца :))
                      винда полюбому управится с 4мя гигами,если есть место на диске и файл подкачки в ручную не "зажат"..
                      кстати, месяц назад собирал железяку 64 битную 4х ядерную. хотел 8 гигов оперативки воткнуть, дык мне сказали что никакая винда, включая 64 битные не управляются более чем с 4-мя гигами оперативки.. без вариантов... а вот виста может... и только она... правда ли, нет ли, не знаю - начальство бабло зажало, и железяка собрана не была.. :)
                        Цитата 2005fs @
                        Цитата Tetsuzin @
                        Меня интересует такой вопрос: почему не получается создать массив размером превышающим два гигабайта

                        Интересно, а куда он поместиться? Например если ОЗУ - 512Мб и файл подкачки 1 Гб

                        Комп DELL PRECISION 690 EM64T
                        Оперативки 16 гигов, файл подкачки 6 гигов.
                        Сообщение отредактировано: Tetsuzin -
                          Цитата Tetsuzin @
                          Оперативки 16 гигов, файл подкачки 6 гигов.

                          там есть забавная сноска
                          Цитата

                          1 The total amount of available memory will be less than 4GB. The amount less depends on the actual system configuration. To fully utilize 4GB or more of memory requires a 64-bit enabled processor and 64-bit operating system. To expand memory to more than 32GB requires a Dell Precision 690 1KW system with memory risers.
                            Цитата Alexus @
                            Цитата Tetsuzin @
                            Оперативки 16 гигов, файл подкачки 6 гигов.

                            там есть забавная сноска
                            Цитата

                            1 The total amount of available memory will be less than 4GB. The amount less depends on the actual system configuration. To fully utilize 4GB or more of memory requires a 64-bit enabled processor and 64-bit operating system. To expand memory to more than 32GB requires a Dell Precision 690 1KW system with memory risers.

                            Да, но на той же машине программа на фортране создавала массив размером 16 гигабайт.

                            Вот еще интересный факт. Пробовали создавать массивы на двух 32битных машинах. Машины одинаовые. 3.5 гига озу.
                            На одной не получается создать массив размером больше 800 мегабайт, а на другой больше 1.5 гигабайта.
                            Массив размером 1509945292 байт создается, а массив размером 1509945293 байта нет. OutOfMemory.

                            Что за ограничение такое, ёлки палки... :angry:
                              память же у них занята системой по-разному...она не только твоими личными программами используеться
                                Вот и хочется узнать, что это за ограничение, потому-что на других языках разницы нет наскоьлго загружена память.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0394 ]   [ 15 queries used ]   [ Generated: 18.05.24, 18:18 GMT ]