Что делает эту среднюю ошибку: 'somefile.c:200: ошибка: формат кадра 1 032 байтов больше, чем 1 024 байта?

Во время делания я вижу ошибку вроде:

cc1: warnings being treated as errors
somefile.c:200: error: the frame size of 1032 bytes is larger than 1024 bytes

Номер строки указывает на закрывающую фигурную скобку функции c, которая имеет подпись как это:

void trace(SomeEnum1 p1, SomeEnum2 p2, char* format, ...) {
    char strBuffer[1024];
    ...

Функция печатает некоторый материал в буфер.

Кто-либо знает то, что этот тип ошибки означает в целом?

27
задан Pierre-Antoine LaFayette 15 March 2010 в 22:32
поделиться

2 ответа

Я предполагаю, что в этой подпрограмме есть какой-то большой буфер, выделенный стеком; это, вероятно, приводит к тому, что кадр стека этой функции превышает 1024 байта, что кажется некоторым ограничением, установленным компилятором для архитектуры, на которой вы строите. Возможные решения включают передачу флага компилятора для ослабления предупреждения, расширения верхнего предела размера стека или динамического выделения буфера.

35
ответ дан 28 November 2019 в 04:59
поделиться

Вот документация GCC, относящаяся к этому предупреждению:

STACK_CHECK_MAX_FRAME_SIZE

Максимальный размер кадра стека в байтах. GNU CC будет генерировать тестовые инструкции в функциях, не являющихся листовыми, чтобы гарантировать, что по крайней мере это количество байтов стека доступно. Если кадр стека больше этого размера, проверка стека будет ненадежной, и GNU CC выдаст предупреждение. По умолчанию выбрано так, что GNU CC генерирует только одну инструкцию в большинстве систем. Обычно вам не следует изменять значение этого макроса по умолчанию.

Из http://gcc.gnu.org/on Lineocs/gcc-2.95.3/gcc_17.html#SEC214

13
ответ дан 28 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: