2017-01-23 7 views
0

Есть ли способ справиться с ошибкой памяти при использовании массива, который был инициализирован как статическая память, как в приведенном ниже коде?Вывести из памяти ситуацию со статическими массивами памяти C++

namespace x{ 
static unsigned char arr[9999999]; // how to catch etc. if there is out of memory exception 

}; 
+1

Это один из тех случаев, когда лучшим ответом является не то, что в первую очередь. –

+0

Не делайте этого. Просто используйте 'std :: vector'. –

ответ

3

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

+0

@ Стартовые статические объекты не выделяются в стеке –

+0

Истина. Мой плохой, я неправильно читаю код. – SergeyA

1

Когда вы компилируете и связываете исполняемый файл, включается код, который выполняет шаги для создания ваших глобальных и статических структур данных до того, как ваша программа когда-либо будет вызвана посредством вашей функции main(). Конструкция массива, о котором вы говорите, будет происходить до того, как какой-либо ваш исполняемый код будет выполняться, и для этого возникнет проблема, которая будет неуправляемой в вашем коде, если это вообще уловимо.

0

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