Каков тип размера std :: array
Это std::size_t
, который является определяемым реализацией целочисленным типом без знака, который достаточно большой, чтобы содержать размер в байтах любого объекта .
1 - почему это происходит?
Согласно сообщению, это происходит потому, что всего " размер массива не должен превышать 0x7fffffff байт ". Похоже, что это ограничение конкретной реализации языка.
Для чего это стоит, стандарт C ++ предлагает 0x40000 в качестве рекомендации для минимального ограничения максимального размера объекта. 0x7fffffff превышает эту рекомендацию с большим отрывом. В системе x86-64 Linux максимальный размер объекта составляет 0x7fffffffffffffff.
Выделен ли массив, например, в куче, если он большой?
Место, в котором выделяется память для объекта, зависит от типа используемого хранилища и от реализации языка. Размер объекта обычно не влияет на это. std::array
никогда не выделяет динамическую c память.
что произойдет, если размер массива превысит размер стека?
Это не имеет значения как превышен размер стека выполнения. Язык не определяет, что происходит, и не признает существование «стека». Это концепция реализации c. Таким образом, то, что происходит, зависит от реализации. Если вам повезет, программа вылетает. Если вам не повезло, ваши секреты хакерам.