Как преодолеть проблему размера стека с помощью 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 (во время компиляции):
- выберите
Project->Setting
. - выберите
Link
страница. - выберите
Category to Output
. - введите предпочитаемый размер стека в
Visual Studio не работает?
хотя я не рассматриваю VS как действительный инструмент разработки, я очень сомневаюсь, что это вызовет вашу проблему.
128 * 128-это 16384. Если у вас слишком мало пространства стека (в Windows это 1 МБ по умолчанию, если я не ошибаюсь), и вы определяете массив e. г. достаточно большой struct
s (размер 64 байта, точнее), то это может легко вызвать переполнение стека, так как автоматические массивы обычно (хотя и не обязательно), выделенные в стеке.
похоже,вы пытаетесь объявить большие массивы в стеке. Память стека обычно ограничена; похоже, вы переполняете ее.
вы можете исправить это, предоставив вашему массиву статическую длительность
static BigStruct arr[128][128];
или динамически выделить память для него
BigStruct (*arr)[128] = malloc(sizeof(*arr) * 128);
// use arr
free(arr);