2010-09-01 3 views
4

This ответ заявляет, что в Java максимальное количество полей объект может иметь это 65536.Максимальное количество полей для C++ объект

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

+1

Возможно, это зависит от платформы, эта страница, к сожалению, ничего не говорит об этом (хотя и полезная в других отношениях) http://msdn.microsoft.ком/EN-US/библиотека/ft39hh4x.aspx – Skurmedel

ответ

14

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

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

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

Список включает

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

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

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

1

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

1

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

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

Смежные вопросы