2009-03-09 2 views
1

Я работаю над примером кода, который выделяет относительно большой локальный массив. (32768, если быть точным) Когда я пытаюсь сделать то же самое, я получаю поведение, представляющее собой переполнение стека. Теперь мне было интересно, может ли мой пример установить стек больше, чем мое приложение. Это возможно? если да, то как?Можете ли вы установить размер стека вызовов в C++? (vs2008)

+0

Просто точка в семантике «стек вызовов» обычно относится к списку функций, составляющих контекст для вызова функции. Память, действительная для контекста вызова, - это просто стек. – RedBlueThing

+0

На самом деле термин «стоп» является устаревшим термином. «Стек вызовов» охватывает весь контекст текущего вызова (то есть локальные переменные и параметры), см. Http://www.programmingforums.org/thread8786.html#9 –

ответ

3

С помощью компилятора Microsoft вы можете использовать /F, чтобы установить размер стека, однако кажется, что вы должны просто выделить объект в куче. У вас должна быть причина, по которой вы выделяете это в стеке, а не в кучу.

Редактировать: This page дает хорошую кросс-платформенную разбивку, хотя она может быть датирована.

+0

Это было очень полезно, хотя это не помогло решить проблему , Дальнейшее исследование необходимо :( –

+0

Возможно, вам следует опубликовать образец вашего кода в новом вопросе. –

+0

http://stackoverflow.com/questions/614842/why-does-this-code-corrupt-memory, уже ответил, но установил размер стека не устранил проблему, поэтому ваши мысли будут оценены –

0

Вместо того, чтобы испортить размер стека, почему бы вам просто не использовать std :: vector или даже динамически выделять массив самостоятельно?

1

Вы можете использовать флаг компилятора/F для установки размера стека по умолчанию или указать его как второй параметр функции CreateThread.

0

Вы можете создать новую тему для этой работы. Обычно вы можете указать размер стека при создании потока и, конечно же, с помощью функции CreateThread() vs2008

Смежные вопросы