Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 16.06.2018
Сообщений: 4
1

Массив на 1000000000000000 элементов

30.06.2018, 19:17. Показов 1852. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть ли что-то наподобие массива, но с максимальным количеством элементов не меньше 1000000000000000?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2018, 19:17
Ответы с готовыми решениями:

Заполнить массив из 10 элементов, записать полученный массив в другой массив из 10 элементов
нужно записать массив из 10 элементов, записать полученный массив в другой массив из 10 элементов

Массив: Записать в файл массив из 6 элементов таких, что являются суммами элементов столбцов исходного массива
Помогите, пожалуйста, написать программу на языке Pascal В текстовом файле записан набор чисел...

Дан массив из 10 элементов A(10). Сформировать массив C из всех элементов, которые будучи умноженные на 5 по модулю меньше 40
Дан массив из 10 элементов A(10). Сформировать массив C из всех элементов, которые будучи...

Даны два одномерных массива целых чисел (массив А, состоящий из n элементов, массив В – из m элементов), заполненных с
n= 22, m= 16, L= -50, P=30; Массив С состоит из элементов исходных массивов, меньших первого...

16
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
30.06.2018, 22:49 2
Лучший ответ Сообщение было отмечено Rosochka как решение

Решение

1000000000000000 - дохреналиард.
Даже если каждый элемент будет весить 1 байт, то это займет 909 терабайт памяти.
3
0 / 0 / 0
Регистрация: 16.06.2018
Сообщений: 4
30.06.2018, 22:51  [ТС] 3
Спасибо, поняла, что тупанула
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
30.06.2018, 22:55 4
Rosochka, тут надо подумать о задаче и подходящем алгоритме.
0
ValeryS
30.06.2018, 23:07
  #5

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
дохреналиард
классное название:D а самое главное, все объясняет :)

0
Croessmah
30.06.2018, 23:09
  #6

Не по теме:

ValeryS, это из Comedy Club, вроде. :)

0
Mirmik
01.07.2018, 09:10
  #7

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
909 терабайт
терибайт

0
Croessmah
01.07.2018, 12:27
  #8

Не по теме:

Цитата Сообщение от Mirmik Посмотреть сообщение
терибайт
Зависит от используемой системы именования. :)

0
Mirmik
01.07.2018, 17:36
  #9

Не по теме:

тоесть, тебибайт, конечно...

0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
01.07.2018, 20:21 10
Цитата Сообщение от Rosochka Посмотреть сообщение
Есть ли что-то наподобие массива, но с максимальным количеством элементов не меньше 1000000000000000?
Если у вас возникла нужда в таком кол-ве виртуальной памяти, а такое реально может понадобиться, например, для работы с разреженными матрицами. Физической памяти надо значительно меньше, а массив обрабатывать соотв. функциями нужно.
Тем не менее должен сказать, что задачу на x86_64 вы можете решить только поумерив аппетит. У меня получилось выделить только 82 TiB.
Если задача - не менее 1PiB, то придется искать другую архитектуру.
По порядку.
1. Процессоры x86_64 поддерживают виртуальное адресное пространство процесса - 48 бит. Это 2^48 = 256TiB. (Где-то читал, что у последних процессоров Интела есть режим с 64 бит, но реальных системных плат, поддерживающих такой режим нет.)
2. Основные дистрибутивы Линукс сейчас поддерживают 128TiB виртуальной памяти для одного процесса. Это уже меньше. Про Венду по понятным причинам не пишу.
3. На своей небольшой машине с 8 GiB физической памяти мне, как написал выше, удалось получить только 82TiB. А это еще меньше.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <err.h>
 
int main() {
  size_t n = (size_t)1024*1024*1024*1024*82;
  char *p = malloc (n);
  if (!p) err (-1, "malloc()");
  strcpy (p + n/2, "Yes!!!\n");
  printf (p + n/2);
  return 0;
}
вывод
Bash
1
2
$ ./a.out 
Yes!!!
Так что - увы :-(((
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
01.07.2018, 20:24 11
Цитата Сообщение от gng Посмотреть сообщение
вывод
Проблемы могут начаться при использовании всей этой памяти. Возврат не нулевого указателя из malloc не гарантирует выделение памяти, т.е. при её заполнении может вылететь segfault.
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
01.07.2018, 20:25 12
PS. Чтобы получить 82TiB пришлось менять параметры ядра. По умолчанию выделяет не больше, чем (физ памаять + своп).

Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
То ест ьвозврат не нулевого указателя из malloc не гарантирует выделение памяти, т.е. при её заполнении может вылететь segfault.
Естественно. Речь о специфических задачах.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
01.07.2018, 23:11 13
Я не очень понимаю, о чем разговор. Если задача потребовала 1000000000000000 - дохреналлиард, то через день она потребует на 1 нолик (справа) больше. А еще через день - еще один. И тут никакие рассуждения о мощности компьютеров не прокатят. Надо включать собственную башку. Хотя бы для того, чтобы найти в интернете приемлемое решение. И понимать, что компутер, хоть и очень большой, но все-таки КОНЕЧНЫЙ АВТОМАТ.

Добавлено через 2 минуты
И что решения, вполне годящиеся для небольших порядков, совсем не сработают для порядков более серьезных.
1
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
02.07.2018, 02:53 14
Цитата Сообщение от Croessmah Посмотреть сообщение
Возврат не нулевого указателя из malloc не гарантирует выделение памяти, т.е. при её заполнении может вылететь segfault.
Это только если запрашивать 0 байт. В ином слечае Стандарт гарантирует :
Цитата Сообщение от 7.22.3 Memory management functions | 1
If the space cannot be allocated, a null pointer is returned.
Или там другие подводные камни, о которых я не знаю ?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
02.07.2018, 09:00 15
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Или там другие подводные камни, о которых я не знаю ?
Угу. Система может сказать что память есть, хотя её нет. Указатель вернется валидный, а потом сегфолт при работе с этой памятью. После выделения всю память можно занулить, тогда увидим результат.

вот, собственно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cstdint>
#include <cstring>
 
 
 
 
int main()
{
    uint64_t size = 1000000000u;
    uint64_t c = 0;
    while (c < 2000u) {
        try {
            uint64_t *p = new uint64_t[size];
            std::cout << (++c) << " " << p << std::endl;
            memset(p, 0, size*sizeof(*p));
        } catch (...) {
            std::cout << "exception" << std::endl;
            break;
        }
    }
}
1
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
02.07.2018, 12:00 16
Цитата Сообщение от Rosochka Посмотреть сообщение
Массив на 1000000000000000 элементов - C++
девчонки такие жлобяры!
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
02.07.2018, 21:54 17
Цитата Сообщение от Croessmah Посмотреть сообщение
Угу. Система может сказать что память есть, хотя её нет. Указатель вернется валидный, а потом сегфолт при работе с этой памятью.
Не сегфолт, конечно. Система тупо убьет процесс, сделав запись в журнале, что "не шмогла". Но от этого не легче.
0
02.07.2018, 21:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2018, 21:54
Помогаю со студенческими работами здесь

Дан целочисленный массив А[п], среди элементов есть одинаковые. Создать массив из различных элементов А[п]
Помогите пожалуйста с поставленной задачей: Дан целочисленный массив А, среди элементов есть...

Дан массив из 30 элементов .Сформировать новый массив, поместив в него номера отрицательных элементов
Помогите написать задачу.

Массив: Из элементов массива А сформировать массив D того же размера по правилу: первые 10 элементов - Di=Ai+i,а остальные - Di=Ai - i.
1)Заменить минимальный по модулю положительный элемент нулем. 2)Заменить элементы с k1-го по k2-й...

Даны два одномерных массива целых чисел (массив A, состоящий из n элементов, массив B - из m элементов)
Даны два одномерных массива целых чисел (массив A, состоящий из n элементов, массив B - из m...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru