exponenta event banner

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

Проблема

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

Причина

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

Например, вы получаете сообщение: 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 МБ на размер структур данных. Даже если спецификация целевого типа процессора допускает структуры данных большего размера, этот внутренний предел ограничивает размеры структуры данных.