Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> win7 64bit выделить память под 11гиг 
:(
    Опции темы
andreyp12
Дата 4.12.2011, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет
Не могу никак понять как в консольном приложении win7 64bit выделить память под 11гигов....

на самом компе 5гиг оперативы
файл подкачки 60гиг выставлен
компилится в конфе х64
solution->system->large address support  включен

нью не канает...
какие операции произвести для решения этой непосильной задачи?

спсибо

Это сообщение отредактировал(а) andreyp12 - 4.12.2011, 21:25
PM MAIL   Вверх
500mhz
Дата 4.12.2011, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



GlobalAlloc()


--------------------

PM MAIL ICQ   Вверх
500mhz
Дата 4.12.2011, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



кстате попробуй выделить к примеру 11 раз по 1 гб
может быть что память не дефрагментирована и один кусок на 11 гб не выделяеться


--------------------

PM MAIL ICQ   Вверх
andreyp12
Дата 7.12.2011, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



код

Код

 SIZE_T dataASize=1000000000;
  SIZE_T allocSize = sizeof(byte)*dataASize;
  //////////////////
  for(int g=0;g<11;g++)
  {
    byte* s=(byte *)GlobalAlloc(GPTR,allocSize);
    if(!s)
    {
      DisplayError(TEXT("VirtualAlloc"), GetLastError());
    } 
    else
    {
      printf("%i bytes allocated\n",allocSize);
    }

    for(int i=0;i<dataASize;i++) s[i]=127;

  //  GlobalFree(s);
  }


вроде работает.. только все начинает умирать после 3гига выделения... тупо своп намертво
PM MAIL   Вверх
feodorv
Дата 8.12.2011, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(andreyp12 @  7.12.2011,  21:42 Найти цитируемый пост)
вроде работает.. только все начинает умирать после 3гига выделения... тупо своп намертво 

Так и должно быть при Вашем объёме оперативки.
Непонятно, какая перед Вами стоит задача, но её надо переосмыслить в сторону меньшей ресурсоёмкости)))


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


Бывалый
*


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

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



 smile 
Немного пошутить можно. Выжал примерно 8 Тб. Дальше система уперлась в предел Commit charge.
Только MEM_RESERVE, без MEM_COMMIT.

Код

int _tmain(int argc, _TCHAR* argv[])
{
#define COUNT (1024 * 8)
    LPVOID lp11Gb [COUNT];
    for (int i = 0; i < COUNT; i++)
    {
        lp11Gb [i] = VirtualAlloc (NULL, 1 * 1024 * 1024 * 1024, MEM_RESERVE, PAGE_READWRITE);
        if (lp11Gb [i] == NULL)
        {
            Sleep (250);
        }
        lp11Gb [i] = VirtualAlloc (NULL, 1 * 1024 * 1024 * 1024, MEM_RESERVE, PAGE_READWRITE);
        if (lp11Gb [i] == NULL)
        {
            Sleep (250);
        }
        lp11Gb [i] = VirtualAlloc (NULL, 1 * 1024 * 1024 * 1024, MEM_RESERVE, PAGE_READWRITE);
        if (lp11Gb [i] == NULL)
        {
            Sleep (250);
        }
        lp11Gb [i] = VirtualAlloc (NULL, 1 * 1024 * 1024 * 1024, MEM_RESERVE, PAGE_READWRITE);
        if (lp11Gb [i] == NULL)
        {
            DebugBreak ();
        }
    }
    for (int i = 0; i < COUNT; i++)
    {
        VirtualFree (lp11Gb [i], 0, MEM_RELEASE);
    }
    return 0;
}

PM MAIL   Вверх
500mhz
Дата 9.12.2011, 00:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



Цитата

Выжал примерно 8 Тб

таки прям 8 ТВ ?


--------------------

PM MAIL ICQ   Вверх
feodorv
Дата 9.12.2011, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Согласно приведённому коду выжаться могло и больше)))
Вот если бы было так:
Код

...
if (lp11Gb [i] == NULL)
        {
            Sleep (250);
            lp11Gb [i] = VirtualAlloc (NULL, 1 * 1024 * 1024 * 1024, MEM_RESERVE, PAGE_READWRITE);
        }
...

тогда COUNT (или i) соответствовал бы числу гигабайт)))


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


Бывалый
*


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

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



user posted image

Цитата(feodorv @  9.12.2011,  10:28 Найти цитируемый пост)
Согласно приведённому коду выжаться могло и больше)))

Увы,  8Тб предел.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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