У меня есть массив из примерно 66 000 элементов, каждый элемент которого представляет собой структуру встроенных типов POD. Этот массив является постоянным и никогда не будет меняться, поэтому моя первоначальная мысль заключалась в том, чтобы просто ввести его в качестве постоянной глобальной переменной.Объявление и инициализация очень больших массивов на куче
Я заявил в заголовке как ехЬегп и инициализировать его в файле CPP, как (очевидно упрощена здесь):
const PODStruct bigArray[] =
{
{1,2,3,4} , {1,2,3,5} , ....
}
с некоторыми редактирования в текстовом редакторе, чтобы он не был просто один сплошной линией ,
--EDIT: Мне напомнили, что глобальные переменные, конечно, не распределены по стеклу, поэтому абзац, который здесь был, ушел! Однако, что, если я еще предпочел бы иметь данные в векторе?
Я думал, так как C++ 11 допускает тот же синтаксис для инициализации std :: vector, я мог бы просто использовать это с простым редактированием и вместо него иметь вектор. Тем не менее, в MSVC++ 2013, когда я пытаюсь скомпилировать его, я говорю, что я попал в пределы компилятора. Я просмотрел стандарты C++ для пределов компилятора и отклонений MSVC++ 13 от него, но ничто не казалось непосредственной причиной. Я предполагаю, что это связано с тем, как этот синтаксис списка инициализаторов фактически реализован.
я могу получить сам массив в вектор, используя конструктор в ответ здесь: How to initialize std::vector from C-style array?
Однако, я бы до сих пор есть массив в памяти дважды, верно? Это не в стеке, как я изначально боялся и не такой большой, так что это не огромная сделка, но похоже небрежное решение.
Я думаю, что я мог бы создать класс со стандартным конструктором и объявить и инициализировать там типизированную таблицу. Затем я могу объявить вектор в конструкторе и построить его с массивом. Единственным членом класса может быть только вектор.
Я мог бы просто объявить, что класс затем создает глобальный экземпляр, верно? Это было бы похоже на поведение, которое у меня было с глобальным массивом. Если бы я хотел уйти от этого, это лучший подход, чтобы объявить класс первым в главном, а затем передать его функциям и методам, которым нужна таблица?
Должен ли я уйти от этого? Эти данные, несмотря на многие из них, соответствуют PI = 3.4.
Глобальные переменные не выделяются в стеке. Ваша озабоченность неуместна (каламбур). –
Ох, конечно, это не так! Ха, это было глупо. Я собираюсь отредактировать этот вопрос, спасибо ... –
@IgorTandetnik Что такое каламбур? –