Ошибка большого объекта

Проблема

Анализ останавливается во время компиляции с сообщением, указывающим, что объект слишком велик.

Причина

Ошибка возникает, когда программа обнаруживает объект, такой как массив, объединение, структура или класс, который является слишком большим для размера указателя выбранного целевого объекта.

Например, вы получаете сообщение, Limitation: struct or union is too large в следующем примере. Вы задаете размер указателя 16 бит. Максимальный размер объекта, выделенный указателю, и, следовательно, максимально допустимый размер для объекта, могут составлять 216-1 байт. Однако вы объявляете структуру следующим образом:

  • struct S 
    { 
      char tab[65536]; 
    }s; 
    
  • struct S 
    { 
      char tab[65534]; 
      int val;
    }s; 
    

Решение

  1. Проверьте размер указателя, заданный в типе целевого процессора. Для получения дополнительной информации смотрите Target processor type (-target).

    Например, в следующем, размер указателя для пользовательского целевого My_target составляет 16 бит.

  2. Измените код или укажите другой размер указателя.

    Для образца можно:

    • Объявить массив меньшего размера в структуре.

      Если вы используете предопределенный тип целевого процессора, размер указателя, вероятно, совпадает с размером указателя на целевой архитектуре. Поэтому ваше объявление может вызвать ошибки в целевой архитектуре.

    • По возможности измените размер указателя для заданного типа целевого процессора.

      В противном случае задайте другой тип целевого процессора с большим размером указателя или определите свой собственный тип целевого процессора. Для получения дополнительной информации об определении собственного типа процессора смотрите Generic target options.

      Примечание

      Polyspace® устанавливает внутренний предел в 128 МБ на размер структур данных. Даже если ваша спецификация целевого типа целевого процессора позволяет структурам данных большего размера, этот внутренний предел ограничивает размеры структуры данных.