cc1plus: исчерпана виртуальная память

Я пытаюсь создать проект в QNX Momentics IDE (4.6), используя qcc в Linux. Мне не удается завершить процесс сборки со следующей ошибкой:

virtual memory exhausted: Cannot allocate memory
/opt/qnx641/host/linux/x86/usr/lib/gcc/i386-pc-nto-qnx6.4.0/4.3.3/cc1plus error 1

В проекте есть файл cpp размером более 1,3 MLOC. Это автоматически сгенерированный код из большой имитацион- ной модели Matlab/SIMULINK, поэтому разделять и властвовать непросто.

Трудно понять, является ли это пределом LOC компилятора qcc или из-за практики программирования в автогенерируемом коде.

Я бы хотел спросить:

  • Есть ли ограничение на размер исходного файла для qcc?
  • Какие плохие методы программирования вызывают это?
  • Есть предложения по устранению virtual memory exhausted проблемы cc1plus?

person wojakzek    schedule 05.02.2014    source источник
comment
Это массивный файл!!! Вам нужно разделить его на более мелкие единицы компиляции.   -  person Sean    schedule 05.02.2014
comment
Есть ли предел, который вы знаете для размера файла?   -  person wojakzek    schedule 05.02.2014
comment
@wojakzek: предел — это ваш RAM (или настройки ulimit).   -  person PlasmaHH    schedule 05.02.2014
comment
@PlasmaHH ulimit неограничен как для жесткого, так и для мягкого. Процесс cc1plus в верхней части показывает, что res и virt находятся в диапазоне от 450 до 500 м, пока не произойдет сбой.   -  person wojakzek    schedule 05.02.2014
comment
@wojakzek: Это было бы слишком много для системы с оперативной памятью всего 500 МБ.   -  person PlasmaHH    schedule 05.02.2014
comment
@PlasmaHH с 3 ГБ физической и 4 ГБ подкачки   -  person wojakzek    schedule 05.02.2014
comment
Я получаю ту же проблему с тестовым файлом строки 2k (хотя использование интенсивного шаблона) на машине x86_64 с 8G RAM + 8G swap. g++ умирает с исчерпанием памяти задолго до того, как я ожидал (около 2,5 ГБ размера RES). соответствующие ulimits не ограничены...   -  person mitchnull    schedule 21.02.2014
comment
@mitchnull, пожалуйста, дайте мне знать о любых шагах по решению проблемы. Я все еще на нем.   -  person wojakzek    schedule 23.02.2014


Ответы (1)


Q1: Есть ли ограничение на размер исходного файла для qcc? A1: qcc = gcc. Точнее: qcc — это легкая оболочка, которая вызывает gcc; всю реальную работу делает gcc. Программное обеспечение GNU, как общая философия, разработано таким образом, чтобы не налагать произвольных ограничений, и я предполагаю, что это особенно верно для gcc. Даже если существуют произвольные ограничения, вы не достигаете их, потому что у вас заканчивается системная память. Случайные ссылки: ограничения препроцессора: http://gcc.gnu.org/onlinedocs/cpp/Implementation-limits.html некоторые ограничения gcc: ограничения размера модуля gcc

Q2: Какие плохие методы программирования вызывают это? A2: Например, выгружая весь исходный код в один файл, как вы продемонстрировали. Я бы сказал, что этот вопрос не имеет отношения к вашему делу, потому что вы уже заявили, что не контролируете сгенерированный код.

Q3: Есть предложения по устранению проблемы нехватки виртуальной памяти в cc1plus? A3: а) добавьте больше оперативной памяти на ваш главный компьютер (может помочь или не помочь в зависимости от того, сколько у вас есть, и от того, является ли ваша ОС 32-битной или 64-битной); б) увеличить пространство подкачки (то же самое); c) если a/b не помогает, обновите ОС до 64-битной и повторите попытку a/b. К сожалению, это 64-битное предложение почти наверняка не применимо к версии gcc, поставляемой QNX с 6.4.1. Может быть, даже не к последнему.

В качестве общего предложения, поскольку qcc использует gcc, я бы рекомендовал, чтобы у вас была такая же сборка кода с использованием gcc хоста (gcc, который поставляется с вашим Linux). Как только это сработает, вы можете начать искать различия, которые, вероятно, сводятся к поддержке 64-битной версии.

person maverick    schedule 06.02.2014