Максимальное количество полей для объекта C ++ - PullRequest
4 голосов
/ 01 сентября 2010

В этом ответе говорится, что в Java максимальное количество полей, которое может иметь объект, составляет 65536.

Есть ли такое ограничение на объект в C ++?

Ответы [ 3 ]

14 голосов
/ 01 сентября 2010

C ++ 03 стандарт, Приложение B (количество реализации):

  1. Поскольку компьютеры конечны, реализации C ++ неизбежно ограничены в размере программ, которые они могут успешнопроцесс.Каждая реализация должна документировать те ограничения, где они известны.Эта документация может ссылаться на фиксированные лимиты там, где они существуют, например, как вычислять переменные лимиты как функцию доступных ресурсов, или говорить, что фиксированные лимиты не существуют или неизвестны.ограничить количества, которые включают те, которые описаны ниже или другие.Число в скобках после каждого количества рекомендуется как минимальное для этого количества.Однако эти величины являются лишь ориентировочными и не определяют соответствие.

В этот список входят

  • Размер объекта [262 144].
  • Члены данных в одном классе, структуре или объединении [16 384].
  • Члены, объявленные в одном классе [4 096].

Так что нетопределенный предел, но реализация, которая применяет предел, «должна» сделать предел, по крайней мере, таким же большим, как указанное значение.Боюсь, я не знаю, что на самом деле делают обычные реализации, но если они не документируют это, они либо не соответствуют, либо предел «неизвестен».Я предполагаю, что «неизвестный» обычно означает «столько, сколько мы можем поместиться в доступной памяти во время компиляции».

Кстати, я не уверен, в чем разница между «членами в классе» и"члены объявлены в классе".Я думаю, это означает, что если ваш базовый класс имеет 10 членов данных, а ваш класс объявляет 10 членов, то в вашем классе всего 20 (или 21) членов данных (в зависимости от того, считается ли подобъект базового класса членом данных или нет).).

1 голос
/ 01 сентября 2010

Нет жестких ограничений на количество полей, которые может иметь объект, но я говорю, что я думаю, что это сильно зависит от платформы и компилятора.

Также, возможно, что-то очень не так с дизайном вашего классаесли вы используете даже 100 или более полей в объекте, поэтому не нужно беспокоиться об ограничениях, а беспокоиться о дизайне ООП

1 голос
/ 01 сентября 2010

Я не верю, что в спецификации C ++ есть что-то, что могло бы охватить это, но я подозреваю, что разные компиляторы будут иметь разные ограничения.

...