Как преодолеть проблему размера стека с помощью Visual Studio (запуск c-кодов с большим массивом)

Я использую Visual Studio 13 для компиляции кодов c в первый раз. Коды отлично работают с 2d arays размером 64 * 64 (в моей программе есть несколько массивов), но если я увеличу размер массива до 128*128, он не будет работать (но компилируется правильно). Вместо этого он дает сообщение ".exe перестала работать". Моя машина имеет 4GB ram и ту же программу с массивом 128*128, если я запускаю коды из linux.

позвольте мне предоставить более подробную информацию: я запустил тот же код из linux с использованием компилятора Intel C (некоммерческая версия) на той же машине. Но из-за какой-то проблемы я теперь вынужден работать из среды Windows. Я искал и установил два C - компилятора (1) Visual Studio 13 и (2) Borland C. оба хорошо работают с небольшим массивом. Но в тот момент, когда я увеличиваю размер массива, Visual Studio выдает сообщение".exe перестала работать". Я компилирую программу, используя " cl "из"командной строки разработчиков VS 13".

Я чувствую, что проблема с размер стека.

по ссылке подробное объяснение (как указано ниже) я видел команду "ulimit", используемую в среде linux для увеличения размера стека. Я помню ее несколько лет назад.

Я чувствую, что мы близки к решению, но моя проблема с Windows (и VS 2013) сохраняется, поскольку я не смог выполнить dumpbin /headers executable_file или editbin /STACK:size. На самом деле я чувствую, что не знаю, как их исполнить. Я попытался выполнить их из "командной строки разработчика VS 13", а также использование Run (Windows start bottom - >поиск (выполнить)->выполнить (prop up)). Прошу Вас предоставить более подробную информацию, если это возможно.

Я искал и нашел этот сайт и думаю, что здесь можно найти решение.

пожалуйста, помогите. Я хочу запустить Visual Studio 13 из Windows.

3 ответов


кажется, что причиной этого является переполнение стека. Проблема может быть решена путем увеличения размера стека.
В visual studio это можно сделать с помощью /STACK:reserve[,commit]. Прочтите статья MSDN.


дополнительные подробное объяснение:

в разделе платформы Windows сведения о размере стека содержатся в исполняемых файлах. Его можно установить во время компиляции в Visual studio С.++
Кроме того, Microsoft предлагает программу editbin.exe что может изменить исполняемые файлы напрямую. Вот более подробная информация:

Windows (во время компиляции):

  1. выберите Project->Setting.
  2. выберите Link страница.
  3. выберите Category to Output.
  4. введите предпочитаемый размер стека в

Visual Studio не работает?

хотя я не рассматриваю VS как действительный инструмент разработки, я очень сомневаюсь, что это вызовет вашу проблему.

128 * 128-это 16384. Если у вас слишком мало пространства стека (в Windows это 1 МБ по умолчанию, если я не ошибаюсь), и вы определяете массив e. г. достаточно большой structs (размер 64 байта, точнее), то это может легко вызвать переполнение стека, так как автоматические массивы обычно (хотя и не обязательно), выделенные в стеке.


похоже,вы пытаетесь объявить большие массивы в стеке. Память стека обычно ограничена; похоже, вы переполняете ее.

вы можете исправить это, предоставив вашему массиву статическую длительность

static BigStruct arr[128][128];

или динамически выделить память для него

BigStruct (*arr)[128] = malloc(sizeof(*arr) * 128);
// use arr
free(arr);