Почему malloc(8 кб) вернул мне NULL??

Тема в разделе "WASM.WIN32", создана пользователем Span, 10 авг 2008.

  1. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Первый раз с этим сталкиваюсь...
    Программа в VC 2008 Express, Runtime - /MDd, ОС - XP x64. Памяти на борту - 4Гб.
    Запустил в дебаге, прога сожрала 1.5 Гб памяти и вылетела, т.к. очередной malloc вернул NULL.

    Из-за чего это могло случиться???
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    не знаю из-за чего, но тогда лучше проверять что возвращает malloc
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Span
    Где то утечка или офигенный расход, вот память и скончалася.
     
  4. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Можно код?
    Фигасе утечка

     
  5. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Ну, мало ли, что ОС - х64. Если выставлена конфигурация проекта - х86 (32бит), то, сожрав 1,5 гига памяти, прога вполне может столкнуться с ее нехваткой.

    ЗЫ 1,5 гига? Ну и проги вы пишете :)
     
  6. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Вот код))
    Код (Text):
    1. lastElement->next->inputSet = (double *) malloc(sizeof(double) * i);
    Ну да, у меня в конфигурации проекта стоит (/MACHINE:X86)
    Только я всегда думал, что 32х битному процессу адресовать и выделить 4Гб (ну почти 4) не проблема. Я не прав??

    Ну я сам офигеваю, но ничего не сделать. Только если с диском работать, что сильно снижает скорость.
    Прога работает с большим (сотни тысяч) количеством изображений.

    Уточню: вылетает, когда скушала 1600 Мб. Я смотрю в диспетчере задач.
     
  7. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    Span

    Скорее всего, в виртуальном адресном пространстве не осталось непрерывных блоков достаточного размера...

    Только я всегда думал, что 32х битному процессу адресовать и выделить 4Гб (ну почти 4) не проблема. Я не прав??

    Да. Во-первых, для user-mode есть только 2 GB виртуального адресного пространства. Во-вторых, если делается попытка выделить сразу большой объем памяти, это может провалиться из-за фрагментации (много мелких свободных блоков и ни одного достаточно большого)
     
  8. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Понял, спасибо.
    А есть вообще возможность работать с большим объемом ОП из user-mode?? Например, 3Гб данных.
     
  9. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Возможно, но 3 гига непрерывным блоком не получится. Смотри Address Windowing Extensions в MSDN.
     
  10. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Понял, буду читать.
     
  11. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Пересобрал программу под x64 в VC2005.
    Отлично работает со всей доступной памятью.