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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Есть ли безразмерные контейнеры? Контейнеры с 64бит индексом? 
:(
    Опции темы
acalister
Дата 7.11.2011, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нужен контейнер который может на 32 битной среде хранить памяти как на 64 битной.
Вот примерно так 

Код

// 800 мегабайт размер памяти на 1 поток
int max = 800000000;

bigVector vector(max);



длинный цикл 10000 циклов
{
vector.push_back("всего помещено 10 Гигабайт");

на 3000ом цикле объем памяти вектор достиг  800 мегабайт значит он самостоятельно создает новый поток.

}


// обращаюсь к индексу 4000 который находится во втором потоке но я как программист об этом не знаю это знает только vector
vector[ 4000 ];



PM MAIL   Вверх
boostcoder
Дата 7.11.2011, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



не понял вопроса, ибо 32-битные переменные адресуют до 4,294,967,295
PM WWW   Вверх
math64
Дата 7.11.2011, 12:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Только если этот контейнер будет сбрасывать данные в файл. В 32-битной среде максимальный объём памяти - 4Gb.
PM   Вверх
boostcoder
Дата 7.11.2011, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



понял smile
так ведь нет нужды держать в памяти все данные.
PM WWW   Вверх
acalister
Дата 7.11.2011, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bigVector внутри имеет структуру хранящюю 32 битные указатели
типа

Код

class bigVector{

long long max;


// поток
struct OneTread
{
тип_данных ** array; / / тип_данных это шаблон
int curent_segment; // индекс текущего куска array
};

// это потоки класса
OneTread * Treads;
int curent_tread;



void push_back(тип_данных число)
{
Treads[curent_tread].push_back(число);
}

};




PM MAIL   Вверх
math64
Дата 7.11.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Отдельные треды не помогут (разве что если ОС 64 битная, а приложение 32 битное, и то не уверен - но зачем делать 32-битное приложение, которое будет выполняться только 64-битной среде?), нужно сбрасывать данные на диск.
PM   Вверх
acalister
Дата 7.11.2011, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(math64 @ 7.11.2011,  12:39)
Отдельные треды не помогут (разве что если ОС 64 битная, а приложение 32 битное, и то не уверен - но зачем делать 32-битное приложение, которое будет выполняться только 64-битной среде?), нужно сбрасывать данные на диск.

Сбрасывать на диск это тратить время. И получится просто мини-субд.
Да среда 64 бит соответственно в ней может быть установлено 20 гигабайт.
А приложение 32 бит.  Преимущества экономия на размере указателя в 32 бит и если важная для приложения сторонняя библиотека доступна только в 32 битном варианте.
Если 100000 элементов то при размере указателя 64 тратится 6 мб и 3 мб для 32.
Но главное просто интересно.

Вот интересует быстрая ли скорость обмена между потоками? 
PM MAIL   Вверх
boostcoder
Дата 7.11.2011, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



acalister, данные, в эти вектора, откуда берутся?

Добавлено @ 12:56
acalister, и вообще, объясни задачу от А до Я. что мы тут, гадать должны?...

Это сообщение отредактировал(а) boostcoder - 7.11.2011, 12:57
PM WWW   Вверх
acalister
Дата 7.11.2011, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(boostcoder @ 7.11.2011,  12:53)
acalister, данные, в эти вектора, откуда берутся?

Добавлено @ 12:56
acalister, и вообще, объясни задачу от А до Я. что мы тут гадать должны...

Имеется ввиду откуда поступают данные?
vector.push_back( данные? );
Это разве имеет значение?

Допустим с диска файла размером 10 гигабайт или по сети из базы данных.

...
Мне нужно в оперативной памяти держать 10 гигабайт в одном контейнере в 32 битной среде.
Чтобы доступ на чтение vector[индекс]   и вставку в конец(кроме создания нового потока) выполнялся за быстрое константное время.
Я думал что в boost или других библиотеках должны быть подобные контейнеры.





PM MAIL   Вверх
boostcoder
Дата 7.11.2011, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(acalister @  7.11.2011,  13:01 Найти цитируемый пост)
с диска файла размером 10 гигабайт или по сети из базы данных.

ну вот. это и есть ключевой момент, который говорит о том, что нет смысла загружать весь объем сразу.

Цитата(acalister @  7.11.2011,  13:01 Найти цитируемый пост)
Мне нужно в оперативной памяти держать 10 гигабайт в одном контейнере в 32 битной среде.

это тебе так кажется. не нужно.



а теперь рассказывай, как эти данные используются? что за алгоритм такой?
PM WWW   Вверх
bsa
Дата 7.11.2011, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Интересно, с тех пор, как знаком с потоками, был уверен, что все переменные созданные в одном потоке доступны и во втором. Таким образом, сколько ты потоков не делай, все они будут иметь доступ к общим 2 ГБ ОЗУ на 32-х разрядной ОС (если не выставлены какие-то хитрые флаги, разрешающие выделение памяти более 2 ГБ)

Это сообщение отредактировал(а) bsa - 7.11.2011, 13:05
PM   Вверх
boostcoder
Дата 7.11.2011, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



bsa, про потоки рано думать. тут подход к решению в корне не правильный. нужно с этого начинать, а не лечить последствия кривой архитектуры/логики проекта.
PM WWW   Вверх
bsa
Дата 7.11.2011, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



boostcoder, это я для общего развития сказал.  smile 
PM   Вверх
acalister
Дата 7.11.2011, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(boostcoder @ 7.11.2011,  13:04)
Цитата(acalister @  7.11.2011,  13:01 Найти цитируемый пост)
с диска файла размером 10 гигабайт или по сети из базы данных.

ну вот. это и есть ключевой момент, который говорит о том, что нет смысла загружать весь объем сразу.

Цитата(acalister @  7.11.2011,  13:01 Найти цитируемый пост)
Мне нужно в оперативной памяти держать 10 гигабайт в одном контейнере в 32 битной среде.

это тебе так кажется. не нужно.



а теперь рассказывай, как эти данные используются? что за алгоритм такой?

Смысл в чем. При старте приложение тратит продолжительное время на помещение данных в оперативную память. 
А затем уже быстро раздает их оттуда. 
Обычные субд при выполнении запроса типа посчитать сколько записей где время между 3 месяцами назад и 6 начинают выполнить его очень долго. 
Если общее количество записей составляет несколько милионов.
А если это делать в оперативной памяти то выйдет быстрее.

PM MAIL   Вверх
bsa
Дата 7.11.2011, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



acalister, ясно. Но в любом случае чуда не произойдет. И найдется такой набор данных, который в ОЗУ конкретного компа не влезет. Поэтому, тебе необходимо делать оптимальный поиск. Я так понял, тебе надо парсить что-то вроде логов. Там записи идут в хронологическом порядке, поэтому зная дату первой записи и дату последней можно найти искомую за Log N попыток (N - число записей), если использовать двоичный поиск. Да, конечно, если весь журнал будет в ОЗУ, то скорость операции будет значительно выше, чем при считывании с диска... Кстати, никто не мешает при запуске приложения проиндексировать лог и хранить в ОЗУ только расположение дат в файле. Таким образом поиск будет осуществляться по данным из ОЗУ.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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