Форум программистов, компьютерный форум 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++ как это можно организовать подробнее

Показать сообщение отдельно
Ivan Fantom
 Аватар для Ivan Fantom
5 / 5 / 1
Регистрация: 12.10.2011
Сообщений: 75
13.07.2013, 03:18  [ТС]     Выделите-ка под массив память размером 32 ГБ
Ребята, вы ушли в сторону от задачи.
Итак malloc/new 32 ГБ никак не выделят. Вдобавок size_t просто урежет значение переменной размера.

Я пробовал использовать функции VirtualAlloc и VirtualFree, которые являются более гибкими средствами выделения памяти.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <malloc.h>
#include "windows.h"
#include <iostream>
using namespace std;
 
void main()
{
    size_t MEMSIZE = 6442450944ULL; //6GB
    char* p = (char*)VirtualAlloc(NULL,MEMSIZE,MEM_COMMIT,PAGE_READWRITE);
 
    if (p!=NULL)
        cout << "OK Alloc " << endl;
    else
    {
        cout << "Error Alloc " << endl;
        
        if (VirtualFree(p,0,MEM_RELEASE))
            cout << "Ok Free";
        else cout << "Not Free" << endl;
        return;
    }
    
    for(size_t i = 0;i<MEMSIZE;i++)
        *(p+i) = (int)i + '0';
 
    cout << p[MEMSIZE-1] << endl;
 
    if (VirtualFree(p,0,MEM_RELEASE))
        cout << "Ok Free";
    else cout << "Not Free" << endl;
}
И результат был таков.

Конфигурация проекта Win32. Память выделилась (с предупреждением об усечении значения переменной размера) размером в 4096, что вполне ожидаемо, ведь VirtualAlloc память выделяет блоками по 4096 байт, и соответственно указанный размер будет округляться до этого числа.

Конфигурация проекта x64. VirtualAlloc возвращает нулевой указатель, что говорит о неудачном выделении. Зато успешно выделялась и заполнялась случайными значениями память объемом 2 ГБ, 3 ГБ. При 5 ГБ вся моя оперативная память была занята и система зависла.

Есть еще такой механизм свопинга, заключающийся в том, что каждый процесс полностью переносится в память, работает некоторое время и потом целиком возвращается на диск. Другая стратегия – виртуальная память – позволяет программам работать даже тогда, когда они частично находятся в оперативной памяти.
Система использует механизм виртуализации адресов при необходимости, но почему-то на мое приложение механизм не распространяется, когда объем выделяемой памяти превышает объем свободной оперативной памяти.
 
Текущее время: 10:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru