Форум программистов, компьютерный форум CyberForum.ru

Не работает unsigned int - C++

Восстановить пароль Регистрация
 
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
07.10.2012, 13:08     Не работает unsigned int #1
int a[536870912] - пашет
unsigned int a[536870912) - нет.

почему ? ведь судя по таблице msdn http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx
UINT_MAX Maximum value for a variable of type unsigned int. 4294967295 (0xffffffff)
4294967295 / 4 = 1073741823 . почему же тогда компилятор ругается ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
07.10.2012, 13:49     Не работает unsigned int #2
Во-первых, у Вас закрывающаяся круглая скобка вместо квадратной. Во-вторых, размерность массива никак не связана с максимальным значением типа.
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
07.10.2012, 13:50  [ТС]     Не работает unsigned int #3
как же вы тогда объясните то что
int a[536870911] - пашет
int a[536870912] - нет
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
07.10.2012, 13:54     Не работает unsigned int #4
Как по-твоему связано максимальное возможное значение для типа и число элементов в автоматическом массиве?
Нет, лучше так: что происходит в этой строке
C++
1
int a[536870911]
?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 13:56     Не работает unsigned int #5
В Windows процессу выделяется 2 гигабайта виртуальной памяти (в пользовательском режиме, ещё 2 гига для ядра). Вы пытаетесь создать массив, который превышает этот предел: 536870912 * 4 + 4 > 231. (Ещё 4 байта на указатель на этот массив.)
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
07.10.2012, 14:38  [ТС]     Не работает unsigned int #6
но ведь 536870912 *4 = 2147483648
а работает то 536870911
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 14:55     Не работает unsigned int #7
Ещё раз.

Массив из 536870911 интов = 536870911*4 + 4 байта = 2147483648 байтов.
Массив из 536870912 интов = 536870912*4 + 4 байта = 2147483652 байта.
Выделяемые Windows 2 гигабайта памяти = 231 байтов = 2147483648 байтов.

Процесс не может отхапать себе больше, чем 2147483648 байтов памяти.

Те лишние четыре байта вылазят, потому что надо хранить то ли размер этого массива, то ли его положение, то ли точку возврата в стеке, то ли ещё что. Скорее всего именно точку возврата. Я не особо в курсе, но судя по поведению, они заняты.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2012, 15:48     Не работает unsigned int
Еще ссылки по теме:

Vector<unsigned char> в int C++
C++ Сложение int и unsigned
C++ Отличаются ли unsigned int и BYTE ?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,135
Записей в блоге: 26
07.10.2012, 15:48     Не работает unsigned int #8
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Ещё 4 байта на указатель на этот массив
Нету никакого указателя
Yandex
Объявления
07.10.2012, 15:48     Не работает unsigned int
Ответ Создать тему
Опции темы

Текущее время: 21:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru