Пространство стека ограничено. При условии, что int
составляет 4 байта на вашей платформе и double
равно 8 байтов, вы запрашиваете 195 КБ памяти, которая может быть или не быть доступной в стеке (это игнорирует любые другие необходимые вещи из стека, такие как вызовы функций и т. Д.).
Для хранения больших наборов данных следует использовать динамическое выделение памяти с std::vector
(вместо памяти стека используется куча памяти, которая намного больше стека):
const int initialValue = 50;
std::vector<std::vector<int>> image (100, std::vector<int>(100, initial_value);
Обратите внимание, что int image[100][100] = { 50 };
будет инициализировать только image[0][0]
до 50, а остальные элементы равны 0. Это исправлено в примере выше (все элементы инициализируются с 50 там), но если вы хотитечтобы сохранить это поведение, вы должны сделать initial_value
равным 0 и изменить image[0][0]
напрямую.
Для повышения производительности предпочтительнее использовать специализированную библиотеку, например Eigen
. Если вам не нужны внешние ресурсы, вы можете вместо этого использовать std::vector<std::array<int, 100>>
, который будет выделять память в одном блоке (лучше для кэша процессора):
std::array<int, 100> initialArray;
std::fill(initialArray.begin(), initialArray.end(), 50);
std::vector<std::array<int, 100>> image (100, initialArray);