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

Выделите-ка под массив память размером 32 ГБ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Графический интерфейс для игр http://www.cyberforum.ru/cpp-beginners/thread921796.html
Здравствуйте форумчане, хочу потренироваться, в частности в написании игр, изучаю С++, думаю на чем делать графику. Посоветуйте пожалуйста: немного знаю Qt, думаю может подучить QML и на версии 5.0. Qt, делать графику и соответсвенно логику игры, или лучше изучать Opengl или Direct X, жду обоснованных ответов, а именно что чем лучше(например opengl и qt кроссплатформенны, а direct x нет)...
C++ Массивы в C++: найти сумму всех элементов массива Подскажите пожалуйста, где здесь ошибка? Мне нужно написать программу ввода 10 чисел в массив, и вывод их на экран с выводом суммы всех элементов массива... #include <stdio.h> #include <iostream> #include <conio.h> int main(void) { http://www.cyberforum.ru/cpp-beginners/thread921788.html
Заполнение матрицы случайными числами C++
помогите пожалуйста.нужно сгенерировать 10 матриц и заполнить их случайными числами от 0 до 1.матрица объявляется int **M. Добавлено через 29 минут int **M; M=new int *; for (int i=0;i<m;i++) M=new int ; for (int i=0;i<m;i++) for (int j=0;j<n;j++) M=rand()%2;
Реализовать задержку сигнала на 10 тактов C++
реализовать задержку сигнала на 10 тактов(шагов цикла) для функции y=x, с использованием массива из 10 элементов в качестве стека для хранения промежуточных данных функции с задержкой
C++ Создать класс отрезков http://www.cyberforum.ru/cpp-beginners/thread921763.html
прошу помощи с программой... может это и не так трудно, но я абсолютно не понимаю как это сделать... кто может помогите пожалуйста, и желательно подробнее... задание: Создать класс отрезков с данными-членами, являющимися концами отрезка, и функциями-членами нахождения длины отрезка, координаты его середины. Составить и использовать класс-наследник для отрезков длиной в два раза меньше, чем в...
C++ Как можно реализовать отправку смс с компьютера? Как можно реализовать отправку смс с компьютера я знаю на дельфи можно через почту майл ру агента отправлять а в c++ как это можно организовать подробнее

Показать сообщение отдельно
Убежденный
Системный программист
Эксперт С++
15099 / 6794 / 1073
Регистрация: 02.05.2013
Сообщений: 11,105
Завершенные тесты: 1
13.07.2013, 10:06     Выделите-ка под массив память размером 32 ГБ
Цитата Сообщение от Ivan Fantom Посмотреть сообщение
Ребята, вы ушли в сторону от задачи.
Как мне кажется, смысл данной задачи не в том, чтобы найти способ выделить 32 ГБ под
массив, а в том, чтобы предложить хорошую абстракцию для работы с таким массивом.
Например, можно написать что-то вроде класса large_array, который будет хранить свое
содержимое на диске, в 32-гигабайтном файле, и предоставлять клиентам доступ к нужным
элементам, загружая их в память по мере необходимости. На Windows наиболее естественным
для этого будет использовать отображаемые в память файлы. Сверху можно навесить кэш, в
котором хранить некоторое количество последних элементов, запрошенных клиентами, для
ускорения доступа (чтобы не дергать диск каждый раз). Но в любом случае это получится
"дырявая" абстракция: с таким массивом нельзя будет работать также, как с обычным -
доступ к памяти нужно будет делать косвенный, например, через дескрипторы, не будет
безопасным выполнять memset на диапазоне элементов такого массива, и т.п.

Цитата Сообщение от Ivan Fantom Посмотреть сообщение
Конфигурация проекта Win32. Память выделилась (с предупреждением об усечении значения переменной размера) размером в 4096, что вполне ожидаемо, ведь VirtualAlloc память выделяет блоками по 4096 байт, и соответственно указанный размер будет округляться до этого числа.
Задача о выделении 32-гигабайтного массива в 32-разрядном процессе нерешаема в принципе.
В каталоге страниц памяти 32-битного процесса просто нет столько места, чтобы хранить
описание массива в 32 гигабайта. Пользовательским процессам в 32-битном адресном
пространстве доступно чуть меньше 2 гигабайт, ключ /3GB принципиально картины не меняет.
О непрерывном блоке памяти такого размера в 32-битном процессе можно забыть.

Цитата Сообщение от Ivan Fantom Посмотреть сообщение
Конфигурация проекта x64. VirtualAlloc возвращает нулевой указатель, что говорит о неудачном выделении.
Не хватило файла подкачки, скорее всего (проверьте GetLastError == 1455).
Кстати, вместо увеличения файла подкачки можно выделить зарезервированный блок (MEM_RESERVE)
охраняемых страниц (PAGE_GUARD) и коммитить их только при попытках доступа, а старые страницы
при этом снова отправлять в резерв. То есть, получится такой аллокатор памяти с отслеживанием
нарушений доступа по исключению. Система использует этот механизм для динамического увеличения
размера стека.

Цитата Сообщение от Ivan Fantom Посмотреть сообщение
Система использует механизм виртуализации адресов при необходимости,
но почему-то на мое приложение механизм не распространяется, когда объем выделяемой памяти
превышает объем свободной оперативной памяти.
Распостраняется. Виртуальная память используется всегда, ее поддержка обеспечена аппаратно, в
том числе на уровне CPU. Но существует путаница между виртуальной памятью и файлом подкачки,
хотя это разные вещи.
 
Текущее время: 12:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru