Проблема в том, что в 32-битном приложении в Mac OS XI появляется ошибка
malloc: *** mmap(size=49721344) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
. Для справки код ошибки находится в sys / errno.h:
#define ENOMEM 12 /* Cannot allocate memory */
Шаблон распределения памяти выглядит следующим образом:
- Сначала выделяется почти 250 МБ памяти
- Выделите 6 блоков по 32 МБ
- Затем обрабатывается 27 изображений, каждое из которых выглядит следующим образом
- Выделить 16 МБ (загружено растровое изображение)
- Выделить 32 МБ, обработать его, освободить эти 32 МБ
- Снова выделить 32 МБ, обработать его, освободить эти 32 МБ
- Свободные 16 МБ, выделенные на шаге 3.1
- Свободные 4 блока, выделенные на шаге 2 (все еще используются 2 блока)
- Свободные 250 МБ, выделенные на шаге 1
- Выделите блоки различного размера, общий размер не должен превышать 250 МБ.И здесь я получаю упомянутую ошибку выделения памяти
Я проверил, что ни один из этих блоков памяти не просочился, поэтому я предполагаю, что используемая память в любой момент времени остается ниже 1 ГБ, которая должна быть доступна на 32-битная система.
Вторым предположением была фрагментация памяти.Но я проверил, что все блоки на шаге 3 используют одни и те же адреса.Поэтому я касаюсь менее 1 ГБ памяти - фрагментация памяти не должна быть проблемой.
Теперь я полностью потерян, что может быть причиной не выделения памяти.Также все работает нормально, когда я обрабатываю менее 27 изображений.Вот часть результата команды кучи до шага 6 для 26 изображений:
Process 1230: 4 zones
Zone DefaultMallocZone_0x273000: Overall size: 175627KB; 29620 nodes malloced for 68559KB (39% of capacity); largest unused: [0x6f800000-8191KB]
Zone DispatchContinuations_0x292000: Overall size: 4096KB; 1 nodes malloced for 1KB (0% of capacity); largest unused: [0x2600000-1023KB]
Zone QuartzCore_0x884400: Overall size: 232KB; 7039 nodes malloced for 132KB (56% of capacity); largest unused: [0x3778ca0-8KB]
Zone DefaultPurgeableMallocZone_0x27f2000: Overall size: 4KB; 0 nodes malloced for 0KB (0% of capacity); largest unused: [0x3723000-4KB]
All zones: 36660 nodes malloced - 68691KB
И для 27 изображений:
Process 1212: 4 zones
Zone DefaultMallocZone_0x273000: Overall size: 167435KB; 30301 nodes malloced for 68681KB (41% of capacity); largest unused: [0x6ea51000-32372KB]
Zone DispatchContinuations_0x292000: Overall size: 4096KB; 1 nodes malloced for 1KB (0% of capacity); largest unused: [0x500000-1023KB]
Zone QuartzCore_0x106b000: Overall size: 192KB; 5331 nodes malloced for 101KB (52% of capacity); largest unused: [0x37f2f98-8KB]
Zone DefaultPurgeableMallocZone_0x30f8000: Overall size: 4KB; 0 nodes malloced for 0KB (0% of capacity); largest unused: [0x368f000-4KB]
All zones: 35633 nodes malloced - 68782KB
Итак, каковы другие причины для «Невозможно выделить память» и какя могу их диагностировать?Или, возможно, я допустил ошибку, исключив упомянутые причины, тогда как я могу проверить их снова?