Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> большой массив, очень большой массив 
V
    Опции темы
marsh123
Дата 29.2.2012, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



Добрый день.

Нужно создать массив размера 4294967296, язык C. 

Обычное объявление, естественно, не работает:
Код

int mass[4294967296];


Вот такой вариант, вроде как, работает:
Код

int *R = malloc(sizeof(int)*4294967296);


НО! Чертов варнинг:
Цитата

warning: large integer implicitly truncated to unsigned type

Портит всю малину!

Необходимо убрать варнинг, помогите в этом деле пожалуйста. Заранее очень благодарен.
PM MAIL   Вверх
feodorv
Дата 29.2.2012, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(marsh123 @  29.2.2012,  10:19 Найти цитируемый пост)
Нужно создать массив размера 4294967296

Что за необходимость?

У Вас 64-битная система?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
bsa
Дата 29.2.2012, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



marsh123, 32-х разрядная машина может адресовать не более 4 ГБ оперативной памяти (без учета памяти, отводимой под устройства ввода/вывода). Ты же пытаешься выделить 16 ГБ. Ты уверен в том, что ты все делаешь верно?
PM   Вверх
newbee
Дата 29.2.2012, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



ты недовыделяешь память. Используй calloc.


--------------------
You're face to face
With man who sold the world
PM   Вверх
boostcoder
Дата 29.2.2012, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



странное желание, выделить 16Гб smile

Цитата(newbee @  29.2.2012,  10:49 Найти цитируемый пост)
calloc

никогда не использовал. а в чем профит?
PM WWW   Вверх
newbee
Дата 29.2.2012, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Цитата(boostcoder @  29.2.2012,  11:57 Найти цитируемый пост)
а в чем профит? 
Задаешь размер куска двумя size_t аргументами, выделенный размер равен их произведению.

Добавлено через 1 минуту и 49 секунд
Цитата(boostcoder @  29.2.2012,  11:57 Найти цитируемый пост)
странное желание, выделить 16Гб
Не странное. даже если столько памяти нет, это может просто упростить работу с разреженными данными.



--------------------
You're face to face
With man who sold the world
PM   Вверх
boostcoder
Дата 29.2.2012, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(newbee @  29.2.2012,  11:03 Найти цитируемый пост)
размер куска двумя size_t аргументами

ы.
так это ж malloc(nmemb*size);

к тому же:
Цитата

The memory is set to zero.

совсем неразумны затраты %)

Цитата(newbee @  29.2.2012,  11:03 Найти цитируемый пост)
может просто упростить работу

может создать экстремальную программу, способную работать на экстремальном железе.
PM WWW   Вверх
borisbn
Дата 29.2.2012, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



попробуй
Код
int *R = malloc(sizeof(int)*4294967296LL);



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
marsh123
Дата 29.2.2012, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



Никогда не использовал calloc, я вас правильно понял?
Код

int *R = calloc(sizeof(int),4294967296);

но варнинг остается.

памяти столько есть, машина х64, но вся она не будет использоваться все равно, это нужно для удобства структурирования.

borisbn, это тоже оставляет варнинг.

Это сообщение отредактировал(а) marsh123 - 29.2.2012, 11:26
PM MAIL   Вверх
newbee
Дата 29.2.2012, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Ммм да, я наврала с calloc. Выделить на процес больше size_t все равно ведь не получится. Если у ТС такой ворнинг, значит у него 32битная система, и нужно придумывать что-то другое.

Цитата(boostcoder @  29.2.2012,  12:16 Найти цитируемый пост)
может создать экстремальную программу, способную работать на экстремальном железе.
Ну да, calloc не годится. А вообще я на amd64-системе с двумя гигабайтами памяти выделяла шестнадцать гигов и использовала его в качестве разреженного хранилища. Очень удобно в использовании плюс O(1).



--------------------
You're face to face
With man who sold the world
PM   Вверх
marsh123
Дата 29.2.2012, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



Проблема решилась вот так:
Код

int *R = calloc(sizeof(int),(size_t)4294967296);


И даже делает вид, что работает, но при попытке доступа к R[4294967295] возникает аварийный останов почему-то, хотя при доступе к R[4294967294] всё нормально  smile  
PM MAIL   Вверх
boostcoder
Дата 29.2.2012, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



marsh123, объясните-ка лучше задачу. я уверен в том, что нет надобности выделять такой объем памяти.
PM WWW   Вверх
marsh123
Дата 29.2.2012, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



Цитата(boostcoder @ 29.2.2012,  11:39)
marsh123, объясните-ка лучше задачу. я уверен в том, что нет надобности выделять такой объем памяти.

Есть алфавит, состоящий из букв от 0 до 2^32-1. Необходимо для каждой буквы алфавита построить список её вхождений в некотором тексте, если буква не встречалась, то NULL список собственно.
Всё это нужно для быстрого доступа к спискам потом.

Это сообщение отредактировал(а) marsh123 - 29.2.2012, 11:48
PM MAIL   Вверх
boostcoder
Дата 29.2.2012, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



ну и как из задачи вытекает требование хранить все данные в памяти?
PM WWW   Вверх
marsh123
Дата 29.2.2012, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



Цитата(boostcoder @ 29.2.2012,  11:53)
ну и как из задачи вытекает требование хранить все данные в памяти?

У меня всего 2 варианта решения, тот, что в 1 посте и еще 1, построить бинарное дерево, где ключом будет буква, а значением ссылка на список буквы. Но тогда придется писать AVL или RB, было немного лень, но, похоже, придется.
Может есть ещё какие-то решения, на чистом СИ?
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0635 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.