Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.174.57] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Операционка WindowsServer2003 64 битный
MSVisualStudio2005 C# Пример создания массива размером немного меньше чем 2 гигабайта. 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 гига. Но один больше двух не получается. В чем тут дело? |
Сообщ.
#2
,
|
|
|
потому что размер размерностей массивов ограничен величиной типа Int32 (т.е. 2^31-1)
|
Сообщ.
#3
,
|
|
|
Цитата Viper @ это ажн 4294967295 элементов. А массив в примере создается размером всего лишь 2147483568. потому что размер размерностей массивов ограничен величиной типа Int32 (т.е. 2^31-1) |
Сообщ.
#4
,
|
|
|
arbuzov, как ты считал, ведь 2^31-1 = 2147483647, сеорее всего ты и отрицательные числа от int32 взял, но индексы то не могут быть отрицательными
|
Сообщ.
#5
,
|
|
|
Цитата Viper @ потому что размер размерностей массивов ограничен величиной типа Int32 (т.е. 2^31-1) Но система то 64 бита. В той же VS2005 интел фортран создает массив размером 16 гигов, без проблем. |
Сообщ.
#6
,
|
|
|
Цитата Tetsuzin @ Int32 он и в африке Int32 хоть в 128 битной операционке..Но система то 64 бита Цитата Pit-Bul @ на каркуляторе как ты считал, ведь 2^31-1 = 2147483647 |
Сообщ.
#7
,
|
|
|
Тут дело не в величине размерностей массивов.
Если массив содержит вещесвенные числа с двойной точностью (8 байт), то массив с 200 миллионами элементов получается создать (1.5 гига) а вот 300 миллионами нет (2.2 гига). |
Сообщ.
#8
,
|
|
|
А фреймворк, собственно, 64-битный или 32-битный? Их же там два.
|
Сообщ.
#9
,
|
|
|
Цитата Tetsuzin @ Меня интересует такой вопрос: почему не получается создать массив размером превышающим два гигабайта Интересно, а куда он поместиться? Например если ОЗУ - 512Мб и файл подкачки 1 Гб |
Сообщ.
#10
,
|
|
|
Цитата 2005fs @ эх.. бедность бедность Например если ОЗУ - 512Мб Цитата 2005fs @ у меня вин2003сервер 32бит разрешает 3гига подкачки (не обижатца ) и файл подкачки 1 Гб винда полюбому управится с 4мя гигами,если есть место на диске и файл подкачки в ручную не "зажат".. кстати, месяц назад собирал железяку 64 битную 4х ядерную. хотел 8 гигов оперативки воткнуть, дык мне сказали что никакая винда, включая 64 битные не управляются более чем с 4-мя гигами оперативки.. без вариантов... а вот виста может... и только она... правда ли, нет ли, не знаю - начальство бабло зажало, и железяка собрана не была.. |
Сообщ.
#11
,
|
|
|
Цитата 2005fs @ Цитата Tetsuzin @ Меня интересует такой вопрос: почему не получается создать массив размером превышающим два гигабайта Интересно, а куда он поместиться? Например если ОЗУ - 512Мб и файл подкачки 1 Гб Комп DELL PRECISION 690 EM64T Оперативки 16 гигов, файл подкачки 6 гигов. |
Сообщ.
#12
,
|
|
|
Цитата 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. |
Сообщ.
#13
,
|
|
|
Цитата 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. Что за ограничение такое, ёлки палки... |
Сообщ.
#14
,
|
|
|
память же у них занята системой по-разному...она не только твоими личными программами используеться
|
Сообщ.
#15
,
|
|
|
Вот и хочется узнать, что это за ограничение, потому-что на других языках разницы нет наскоьлго загружена память.
|